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

結果:

相關文章
相關標籤/搜索