2019年全国高校计算机能力挑战赛初赛C语言解答

http://www.ncccu.org.cn算法

2019年全国高校计算机能力挑战赛分设大数据算法赛,人工智能算法赛,Office高级应用赛,程序设计赛4大赛项编程

C语言初赛解答测试

1:编程1

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;
}

 

2:编程2

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;
}

 

 

3:编程3

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;
}

 

4:编程4

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;
}

 

5:编程5

因部分同窗反应比赛刚开始时间网页较卡顿,现统一延长比赛时间至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;
}

结果:

相关文章
相关标签/搜索