用法一:
主要思想:输入的分数只可能是0到100的101种整数。我们为每一种可能分别计数,便能在输入结束时得知每一种分数的重复情况。
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF&&n!=0){
int Hash[101]={0};
//用此数组记录各种分数出现的次数
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
Hash[x]++;
}
int x;
scanf("%d",&x);
printf("%d\n",Hash[x]);
}
return 0;
}
用法二:
主要思想 偏移量
由于输入数的区间是-500000,到+500000.因此需要将其对应到数组0到1000000的下标
要加上偏移量
#include<stdio.h>
#define offset 500000
int hash[1000001];
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=-500000;i<=500000;i++){
hash[i+offset]=0;
}
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
hash[x+offset]=1;
}
for(int i=500000;i>=-500000;i--){
if(hash[i+offset]==1){
printf("%d",i);
m--;
if(m!=0)printf(" ");
else
{
printf("\n");
break;
}
}
}
}
}