第二阶段补题报告
7-1 最受欢迎的菜品
某自助餐厅要求餐厅的客人在就餐后进行投票,选出一款最喜爱的菜品,每日营业结束后进行投票统计,选出投票数最多的菜品为最受欢迎的菜品。 请编写一个程序帮助餐厅快速完成这个统计工作。
原代码
#include <stdio.h> int main(){ int n,i,j; scanf("%d",&n); int a[n]; int b[1000]={0}; for(i=0;i<n;i++){ scanf("%d",&a[i]); } for(i=0;i<n;i++){ for(j=1;j<=n;j++){ if(a[i]==j) b[j]++; } } int flag; for(i=1;i<n+1;i++){ flag=b[1]; if(b[i+1]>b[i]) flag=b[i+1]; } printf("%d",flag); return 0; }
答案错误,题目没有认真看
改正后:
#include<stdio.h> int main() { int N; scanf("%d", &N); int n, num[1001] = { 0 }; while (scanf("%d", &n) != EOF) { num[n]++; } int i,max=1; for (i = 1; i <= N; i++) { if (num[i] >= num[max]) { max = i; } } int j; for (j = 1; j <= N; j++) { if (num[j] == num[max]) { printf("%d %d\n", j, num[j]); } } return 0; }
7-2 字符串循环左移
原代码
#include <stdio.h> #define N 100 int main(){ int n,i=0,j; char c[N]; char a[N]; while((c[i]=getchar())!='\n'){ i++; } c[i]='\0'; scanf("%d",&n); if(strlen(c)/n==0&&n!=0){ puts(c); } else{ for(i=0;c[i]!='\0';i++){ a[i]=c[i+n]; } for(i=0;i<N;i++){ printf("%c",a[i]); } } return 0; }
答案错误,不知道为什么第二个数组输出为空白
改正后:
#include<stdio.h> int main() { int n,i; char a[101],b[101]; gets(a); scanf("%d",&n); int k=strlen(a); if(n>strlen(a)) n=n-strlen(a); for(i=0;i<n;i++){ b[i]=a[i]; } for(i=n;i<k;i++) printf("%c",a[i]); for(i=0;i<n;i++) printf("%c",b[i]); return 0; }
7-3 顺时针矩阵
#include<stdio.h> #include<stdlib.h> #define X 100 int main(){ int N,m=1; int i,j,k,z,c; int a[X][X]={0}; scanf("%d",&N); for(c=0;c<=N/2+1;c++){ for(j=c;j<N-c;j++){ a[j][N-c-1]=m++; } for(k=N-c-2;k>=c;k--){ a[N-c-1][k]=m++; } for(z=N-c-2;z>=c+1;z--){ a[z][c]=m++; } for(i=c;i<N-c-1;i++){ a[c][i]=m++; } } for(i=0;i<N;i++){ for(j=0;j<N;j++){ printf("%4d",a[i][j]); } printf("\n"); } }
( 还没有看懂具体原理是什么)