-
题目描述:
-
读入N名学生的成绩,将获得某一给定分数的学生人数输出。
-
输入:
-
测试输入包含若干测试用例,每个测试用例的格式为
第1行:N
第2行:N名学生的成绩,相邻两数字用一个空格间隔。
第3行:给定分数
当读到N=0时输入结束。其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。
-
输出:
-
对每个测试用例,将获得给定分数的学生人数输出。
-
样例输入:
-
3 80 60 90 60 2 85 66 0 5 60 75 90 55 75 75 0
-
样例输出:
-
1 0 2
代码1:
#include <stdio.h>
int main() {
int n,score;
int buf[1001];
int i;
while(scanf("%d",&n)!=EOF) {
if(n==0)
break;
for(i=0;i<n;i++)
scanf("%d",&buf[i]);
scanf("%d",&score);
int count=0;
for(i=0;i<n;i++)
if(buf[i]==score)
++count;
printf("%d\n",count);
}
return 0;
}
以上是最普通的解法。本题可以使用hash的方法更好。注意:输入的分数是在0到100之间的,因此种类是有限的,而且必定是一个整数。这样就可以为每个数分别计数。代码2:
#include <stdio.h>
int main() {
int n,x,i;
while(scanf("%d",&n)!=EOF && n!=0) {
int hash[101] = {0};
for(i=0;i<n;i++) {
scanf("%d",&x);
hash[x]++;
}
scanf("%d",&x);
printf("%d\n",hash[x]);
}
return 0;
}