第二阶段补题报告

 

 这题运用了条件语句和循环语句,将字符分成四种,第一种存到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;
}

数组掌握得不是很好,课后会花费更多时间去学习,巩固。

posted @ 2021-12-12 22:06  黄贵喆  阅读(32)  评论(0编辑  收藏  举报