JYU計算機學院團體賽20級題解
阿新 • • 發佈:2020-12-06
6-1
先求數字的位數,再求出各位數的i次冪和,最後判斷
1 #include<math.h> 2 int narcissistic(int number){ 3 int x=number,i=0,sum=0; 4 //獲得數字的位數 5 while(x){ 6 x/=10; i++; 7 } 8 x=number; 9 //獲得數字各位數的i次冪 10 while(x){ 11 sum+=pow(x%10,i); 12 x/=10; 13 } 14 if(sum==number) return多看多學1; 15 else return 0; 16 } 17 void PrintN( int m, int n ){ 18 for(int i=m+1;i<n;i++) 19 if(narcissistic(i)) printf("%d\n",i); 20 }
6-2
講過
1 int f(int n){ 2 if(n==0) return 0; 3 if(n==1) return 1; 4 return f(n-1)+f(n-2); 5 }課上講過
6-3
emmmmm
1 void findmax( int *px, int *py, int *pmax ){
2 *pmax=*px>*py?*px:*py;
3 }
常規
7-1
判斷就完事了沒啥好講的,沒過的建議自己去原題補題,提交後會有測試點描述。
1 #include <stdio.h> 2 #include <math.h> 3 4 int main() 5 { 6 double a,b,c; 7 scanf("%lf %lf %lf",&a,&b,&c); 8 9 if(a!=0){//a!=0 10 double delta=b*b-4程式碼點我*a*c; 11 if(delta>0){ 12 //兩個不相等的實根 13 double x1,x2; 14 x1=(-b+sqrt(delta))/(2*a); 15 x2=(-b-sqrt(delta))/(2*a); 16 printf("%.2lf\n",x1); 17 printf("%.2lf\n",x2); 18 } 19 else if(delta<0){ 20 //有兩個不相等的復根 21 if(b!=0){ 22 //非純虛根 23 double real=-b*1.0/(2*a); 24 double imag=sqrt(-delta)*1.0/(2*a); 25 printf("%.2lf%+.2lfi\n",real,imag); 26 printf("%.2lf%+.2lfi\n",real,-imag); 27 } 28 else{ 29 //純虛根 30 double imag=sqrt(-delta)*1.0/(2*a); 31 printf("%.2lf%+.2lfi\n",0.0,imag); 32 printf("%.2lf%+.2lfi\n",0.0,-imag); 33 } 34 } 35 else{ 36 //有一個根 此時a!=0 37 printf("%.2lf\n",-b*1.0/(2*a)); 38 } 39 } 40 else{ 41 if(b!=0){ 42 //有一個根 此時a!=0 43 printf("%.2lf\n",-c*1.0/b); 44 } 45 else{ 46 //特殊情況 47 if(0==c) printf("Zero Equation\n"); 48 else printf("Not An Equation\n"); 49 } 50 } 51 return 0; 52 }
7-2
列印楊輝三角形
楊輝三角形就是除第一行是1外,第i行的第j個元素都是第i-1行第j列+第i-1行第j-1列的和,即f[i][j]=f[i-1][j]+f[i-1][j-1]。
其餘的就是格式問題了。
1 #include<stdio.h> 2 //陣列開大一點防止越界,把陣列設定為全域性變數會初始化為0 3 int f[12][12]; 4 int main() 5 { 6 int n; 7 f[0][0]=1; 8 scanf("%d",&n); 9 //i控制行數 l控制每一行前面的空格 j控制列數 10 for(int i=1,l=n-1;i<=n;i++,l--){ 11 for(int k=1;k<=l;k++) printf(" "); 12 for(int j=1;j<=i;j++){ 13 f[i][j]=f[i-1][j-1]+f[i-1][j]; 14 printf("%4d",f[i][j]); 15 } 16 printf("\n"); 17 } 18 return 0; 19 }程式碼康我
7-3
就是一個簡單的結構體比較。
1 #include<stdio.h> 2 struct node{ 3 int num; 4 char name[12]; 5 int sc1,sc2,sc3,sum; 6 }stu,maxx; 7 8 int main() 9 { 10 int n; 11 maxx.sum=-1; 12 scanf("%d",&n); 13 for(int i=0;i<n;i++){ 14 scanf("%d%s%d%d%d",&stu.num,stu.name,&stu.sc1,&stu.sc2,&stu.sc3); 15 stu.sum=stu.sc1+stu.sc2+stu.sc3; 16 if(stu.sum>maxx.sum) maxx=stu; 17 } 18 printf("%s %05d %d",maxx.name,maxx.num,maxx.sum); 19 return 0; 20 }看看程式碼
7-4
注意格式就好輸出數字的時候別多輸出換行
1 #include<stdio.h> 2 int main() 3 { 4 int start,end,sum=0; 5 scanf("%d%d",&start,&end); 6 int i=end-start+1; 7 8 for(int a=0;a<i;a++){ 9 printf("%5d",start+a); 10 if((a+1)%5==0 && a+1<i) 11 printf("\n"); 12 sum=sum+start+a; 13 } 14 printf("\nSum = %d",sum); 15 16 return 0; 17 }程式碼沒意思
7-5
這道題居然全軍覆沒,就是個模擬,開個陣列點到哪個猴子就把對應下標設定為1,迴圈的時候遇到1就跳過,最後陣列剩下一個值為0的下標就是猴子的KING。
1 #include<stdio.h> 2 int s[1000]; 3 int main(void) 4 { 5 int i=0,cnt=0,n,len; 6 scanf("%d",&n); 7 len=n; 8 while(1) { 9 if(n==1) break; 10 if(!s[i]){ //如果s[i] != 0,說明這個位置的猴子沒有退出 11 cnt ++; //則計數器+1 12 } 13 if(cnt==3) { //如果計數器加到3,即報數報到3 14 s[i]=1; //將此位置賦1,即 15 cnt=0; //重新報數 16 n--; //猴子數量-1 17 } 18 i=(i+1)%len; //如果超過最長長度,則重頭開始 19 } 20 for(int i=0;i<len;i++) { 21 if(!s[i]){ 22 printf("%d",i+1); 23 break; 24 } 25 } 26 return 0; 27 }模擬模擬
你說模擬太麻煩了?
當然這道題還有程式碼更短的做法,三行程式碼搞定。
自行學習約瑟夫環問題。
1 #include<stdio.h> 2 int main() 3 { 4 int n,i,sum=0; 5 scanf("%d",&n); 6 for(i=2;i<=n;i++) sum=(sum+3)%i; 7 printf("%d",sum+1); 8 return 0; 9 }約瑟夫環
7-6
判斷一下開頭有沒有負號,行末沒有空格,沒了,簡單。
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char py[][5] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; 6 char num[100]; 7 scanf("%s",num); 8 for(int i=0;i<strlen(num);i++){ 9 if(!i&&num[i]=='-') printf("fu"); 10 else{ 11 if(!i) printf("%s",py[num[i]-'0']); 12 else printf(" %s",py[num[i]-'0']); 13 } 14 } 15 return 0; 16 }康康康康
7-7
Hello World!