1. 程式人生 > 其它 >第二階段補題報告

第二階段補題報告

這題運用了條件語句和迴圈語句,將字元分成四種,第一種存到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;
}

陣列掌握得不是很好,課後會花費更多時間去學習,鞏固。