第二階段補題報告
阿新 • • 發佈:2021-12-13
這題運用了條件語句和迴圈語句,將字元分成四種,第一種存到b[0],第二種存到b[1],這樣推下去;所以有如下程式碼
void fun(char s[],int b[]){ int i=0,j=0; for(i=0;s[i]!='\0';i++){ if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')) b[0]++; else if(s[i]>='0'&&s[i]<='9') b[1]++; else if(s[i]==' ') b[2]++; else b[3]++; } }
這題輸入輸出過於麻煩導致執行超時;也沒有找到最大值,先將菜品編號,接著輸入所有的投票,再統計;然後用迴圈找第一個最大值,在用一個迴圈找接下來的最大值;程式碼如下:
#include<stdio.h> int main(){ int n,i=0,j=0,c; int a[1001],b[1001]={0}; scanf("%d",&n); for(i=0;i<n;i++){ a[i]=i+1; } while(scanf("%d",&c)!=EOF){ for(j=0;j<n;j++){ if(c==a[j]) b[j]++; } } int max=0; for(i=0;i<n;i++){ if(b[i]>b[max]) max=i; } for(j=0;j<n+1;j++){ if(b[j]==b[max]) printf("%d %d\n",j+1,b[max]); } return 0; }
沒有考慮全面,只將一種情況輸出;會想起學長的講的一題,取移動步數對於整個字元個數的餘數,輸出分兩步,正常序列和非正常序列:
#include<stdio.h> int main(){ int i=0,len=0,N; char s[100]; while((s[len]=getchar())!='\n'){ len++; } scanf("%d",&N); N%=len; for(i=N;i<len;i++){ printf("%c",s[i]); } for(i=0;i<N;i++){ printf("%c",s[i]); } return 0; }
沒什麼思路,整理了一下:分成四個小迴圈,對每邊的數字進行賦值,外面一個大迴圈來控制圈數;
#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; }
陣列掌握得不是很好,課後會花費更多時間去學習,鞏固。