第二阶段补题报告
这题运用了条件语句和循环语句,将字符分成四种,第一种存到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; }
数组掌握得不是很好,课后会花费更多时间去学习,巩固。