http://www.ncccu.org.cn算法
2019年全国高校计算机能力挑战赛分设大数据算法赛,人工智能算法赛,Office高级应用赛,程序设计赛4大赛项编程
C语言初赛解答测试
16.现有一个数字闹钟(时间采用24时制)。已知当前时间和预订的闹钟时间(所有为整点时间),请你帮忙计算,几小时后闹钟会响。
输入说明:每一个输入有ct和tt,ct是当前时间,t是预约的闹铃时间。
输出说明:距离闹钟响起的时间。
输入样例:22 5大数据
输出样例:7人工智能
代码提交说明:
1.请严格按照每道题目给出的输入/输出样例编写相关I/O代码,数字间的默认间隔是一个空格,浮点数的默认输出精度是保持小数点后2位。样例之外的提示信息请不要在屏幕上输出。
2.请你们确保提交的代码能够在指定的编译条件下正确地编译执行,不然自动评测程序将给出编译错误或运行时错误的信息。
3.每道编程题目,若是没有特殊说明,须要在1秒内完成程序的运行和输出结果,超过这个时间限制将会被判超时,失去相应测试用例的分数。每一个可执行文件可以使用的空间不得大于1MB。
4.每道编程题会有多个测试用例,每经过一些测试用例能够得到相应的分值,但只有经过所有测试用例才能拿到这题所有的分spa
#include <stdio.h> int main(){ int st,et; int i,res=0; scanf("%d",&st); scanf("%d",&et); for(i=st;i<24;i++){ res++; } for(i=0;i<et;i++){ res++; } printf("%d",res); return 0; }
17.输入正整数N和M(O<N<M<=100000),请输出N到M(含N和M)之间不能被3或11整除但能够被5整除的数的个数。
输入说明:输入两个正整数N和M。输出说明:统计知足条件数的个数。
输入样例:40 50设计
输出样例:1code
#include <stdio.h> #include <stdlib.h> int main(){ int n,m; int i,res=0; scanf("%d%d",&n,&m); for(i=n;i<=m;i++){ if((i%3!=0&&i%11!=0)){ continue; } if(i%5==0){ res++; } } printf("%d",res); return 0; }
18.在体操比赛中,每位选手的得分是由多名裁判综合打分所得。如今已经汇总了N名选手的我的总得分blog
(选手的编号依次为1,2,……N),请你设计程序找出第K名选手在全部选手中的排名。
输入说明:第一行是N和K,N表示运动员的个数,K是选手序号;第二行依次是这N位运动员的我的总得分。
输出说明:第K名(从1开始)选手在全部选手中的排名。
输入样例1:6 4 排序
500 450 460 480 510 530
输出样例1:4
输入样例2: 6 2
500 490 490 490 490 530
输出样例2:3
#include <stdio.h> #include <stdlib.h> int a[1000000]; int cmp(const void *a,const void *b) { return *(int *)b-*(int *)a; } int main(){ int n,m,dest=0; int i,res=0; scanf("%d%d",&n,&m); for(i=0;i<n;i++){ scanf("%d",&a[i]); } dest=a[m-1]; qsort(a,n,sizeof(a[0]),cmp); for(i=0;i<n;i++){ if(a[i]==dest){ printf("%d",i+1); break; } } return 0; }
19.假设以某个雷达站所在位置为基点,坐标记为(0,0),侦察半径是R公里。现有N个运动物体坐标(单位是干米),请计算有多少个运动物体会被雷达侦测到。
输入说明:第一行是两个数N和R,分别表示运动物体的个数和侦察半径。接下来是N行分别输入运动物体的坐标(XY)。
输出说明:N个运动物体中可以被雷达发现的个数。
输入样例:5 30
10 25
18 12
19 10
20 25
21 22
输出样例:3
#include <stdio.h> #include <stdlib.h> int main(){ int n,m,dest=0; int i,res=0,x,y; scanf("%d%d",&n,&m); for(i=0;i<n;i++){ scanf("%d%d",&x,&y); dest = sqrt(x*x+y*y); if(dest<m){ res++; } } printf("%d",res); return 0; }
因部分同窗反应比赛刚开始时间网页较卡顿,现统一延长比赛时间至17:10,特此公告!
20.给出N(N<1000)个整数,用它们构建一个二叉排序树。请给出元素K是其双亲节点的左子树仍是右子树。
输入说明:第一行输入N和K,第二行输入N个整数。
输出说明:若是是左子树输出Left child,若是是右子树输出Right child
输入样例:7 6
12 15 11 8 6 10 3
输出样例:Right child
#include <stdio.h> #include <stdlib.h> struct TNode{ int data; struct TNode *lt; struct TNode *rt; }; struct TNode* insrtTree(struct TNode *t,int key,int i); int arr[1000]={0}; int main(){ int n,m; int i,t; scanf("%d%d",&n,&m); struct TNode *root=NULL; for(i=0;i<n;i++){ scanf("%d",&arr[i]); root=insrtTree(root,arr[i],i); } if(arr[m-1]==0){ printf("Right child"); }else{ printf("Light child"); } return 0; } struct TNode* insrtTree(struct TNode *t,int key,int i){ if(t==NULL){ t=(struct TNode*)malloc(sizeof(struct TNode)); t->lt=t->rt=NULL; t->data=key; return t; } if(t->data>key){ arr[i]=1; t->lt=insrtTree(t->lt,key,i); }else{ arr[i]=0; t->rt=insrtTree(t->rt,key,i); } return t; }
结果: