三、Hash_1081_1

博客介绍了如何利用Hash思想解决一类有限且存在重复元素的问题,如九度在线判题1081。通过建立Hash数组,将元素值作为数组下标,存储其出现次数,简化了计数过程,提高了效率。
摘要由CSDN通过智能技术生成

这题一看会觉得,哎呦真简单。直接弄变量计数,一个作为对比标准,一个数组用以存储。然后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;
}

很明显,对于这种有重复、情况有限(输入的分数从0100一共101)、要求计数的这类问题,都可以从Hash的角度来考虑,有会达到事半功倍的效果。


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

时间限制:1 秒

内存限制:32 兆

特殊判题:


题目描述:
读入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
来源:
2006年浙江大学计算机及软件工程研究生机试真

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值