阶段二补题报告
这题呢,也挺无语的,考试的时候忘了再if前加else,导致一直报错还不知道原因,所以加上else就过了
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; }
一直出现编译错误,没找到原因,看了提示应该是其中有中文的符号,考试的时候真的没找出原因,换了个方法,分两次输出:首字母开始的正常序列和非正常序列,这样不用找规律,可以直接输出;泪目
这题确实是没有想到好方法把所有数字按题目规律输出,想了很久,就是分四次循环输出四边,但是容易出现最中心的数字输不出;所以每一边少输出一个最后的数字,最后一个循环都输出;
伪码:
Input N,n,num=1 for n<- 0 to N-n-2 for i<- n-1 to N-n-2 a[i][N-n-1]=num++ for j<- n-1 to N-n-2 a[N-n-1][j]=num++ for h<- n-1 to N-n-2 a[h][n]=num++ for k<- n+1 to N-n-2 a[n][k]=num++ end for i<- 0 to N-1 for j<- 0 to N-1 output a[i][j] end end
最后代码实现:
#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; }
我觉得我这章学得挺认真的,题也写了,反思了一下觉得可能是没复习,还有做题时的方法有问题;
希望逐渐找到恰当的方法去学,认真做好应做的事。