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.每道編程題會有多個測試用例,每通過一些測試用例可以獲得相應的分值,但只有通過全部測試用例才能拿到這題全部的分

#include <stdio.h> 
int main(){
    int st,et;
    int i,res=0;
    scanf("%d",&st); 
    scanf("%d",&et); 
    if(et<st){
      for(i=st;i<24;i++){
        res++;
        }
        for(i=0;i<et;i++){
        res++;
        }
    }else{
        for(i=st;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

輸出樣例:1

#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名選手的個人總得分

(選手的編號依次為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;
}

結果:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM