题目1018:统计同成绩学生人数

来源:互联网 发布:js string转jsonarray 编辑:程序博客网 时间:2024/06/02 00:02
题目描述:
读入N名学生的成绩,将获得某一给定分数的学生人数输出。
输入:
测试输入包含若干测试用例,每个测试用例的格式为


第1行:N
第2行:N名学生的成绩,相邻两数字用一个空格间隔。
第3行:给定分数

当读到N=0时输入结束。其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。
输出:
对每个测试用例,将获得给定分数的学生人数输出。
样例输入:
380 60 9060285 660560 75 90 55 75750
样例输出:
102

代码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;}