这题一看会觉得,哎呦真简单。直接弄变量计数,一个作为对比标准,一个数组用以存储。然后for循环输入、for循环输出,并且跟着计数,最后一输出就完了。但我们这里现在采用一种Hash的思想来解决这类“有限的,重复的”问题。
基本思想就是,建立一个Hash数组。与之前的数组不同的是,Hash数组的序号本身就是所存储的元素的大小,而这个Hash数组的值就是它的重复次数。这样我们找某个数出现的重复次数,其实就变成了找Hash数组中序号为所找元素大小的数组的值,直接输出就行了。
#include<stdio.h>
int main(){
int n,i,x;
int Hash[101]={0};
while(scanf("%d",&n)!=EOF&&n!=0){
for(i=1;i<=n;i++){
scanf("%d",&x);
Hash[x]++;
}
scanf("%d",&x);
printf("%d\n",Hash[x]);
}
return 0;
}
很明显,对于这种有重复、情况有限(输入的分数从0到100一共101种)、要求计数的这类问题,都可以从Hash的角度来考虑,有会达到事半功倍的效果。
题目1018:统计同成绩学生人数