第二次上機考試補題報告
阿新 • • 發佈:2021-12-12
一.做題情況
二.題目
7-1最受歡迎的菜品
做題時的程式碼:
#include<stdio.h> int main() { int n=0,i=0,k=0,t=0,j=0,m=0; scanf("%d",&n); int a[1000]; int c=n+1,b[c]; while(scanf("%d",&a[i])!=EOF) { i++; } m=i; for(i=0;i<m;i++) { for(k=0;k<n;k++) {if(a[i]==k) { b[k-1]++; } } } for(i=1;i<n;i++) { if(b[i]>b[i-1]) { j=i; } } for(i=0;i<n;i++) { if(b[j]==b[i]) { if(i<j) { printf("%d %d\n",i+1,b[i]); } } } printf("%d %d",j+1,b[j]); return 0; }
把問題想的過於複雜了,而且程式碼寫的很亂
後來思考的程式碼:
#include<stdio.h> int find(int a[],int N); int main() { int count[1001]; int n=0,x=0,j=0; scanf("%d",&n); while((scanf("%d",&x))!=EOF) { count[x]++; } int i=find(count,n+1); for(j=0;j<n+1;j++) { if(count[i]==count[j]) { printf("%d %d\n",j,count[j]); } } return 0; } int find(int a[], int N) { int k=0; for (int i=0;i<N;i++) { if (a[k]<a[i]) { k=i; } } return k; }
但是還是有個地方過不了
7-2 字串迴圈左移
做題時的程式碼:
#include<stdio.h> void link(char s1[],char s2[]); int main() { int i=0,n=0,N=0,k=0; char a[1000]; char c[1000]; gets(a); while(a[i]!='\0') { i++; } n=i; scanf("%d",&N); if(N<n) { for(i=0;i<N;i++) { c[i]=a[i]; } link(a,c); }else { k=N%n; for(i=0;i<k;i++) { c[i]=a[i]; } link(a,c); } return 0; } void link(char s1[],char s2[]) { int i,j; i=0; while(s1[i]!='\0') i++; for(j=0;j<i;j++) { s1[i]=s2[j]; i++; } puts(s1); }
又把簡單的問題想難了,當時還想直接找個函式接一下,但是其實直接輸出原字元數組裡的東西就可以了,於是有了以下程式碼
後來思考的程式碼:
#include<stdio.h> int main() { char str[101]; int N; gets(str); scanf("%d",&N); N%=(strlen(str)); for(int i=N;i<strlen(str);i++) { printf("%c",str[i]); } for(int i=0;i<N;i++) { printf("%c",str[i]); } return 0; }
7-3 順時針矩陣
考試時沒想出來應該怎麼寫,現在想想應該是需要用一下二維陣列
後來思考的程式碼:
#include<stdio.h> int main() { int N,i,j,n,num=1; int a[21][21]; scanf("%d",&N); for(n=0;n<=N/2;n++) { for(i=n;i<N-n-1;i++) a[i][N-n-1]=num++; for(j=N-n-1;j>n;j--) a[N-n-1][j]=num++; for(i=N-n-1;i>=n;i--) a[i][n]=num++; for(j=n+1;j<N-n-1;j++) a[n][j]=num++; } for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%4d",a[i][j]); } printf("\n"); } return 0; }