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; }
結果: