c++数组计数法

文章关注青少年编程教育中的问题解决,包括统计一组整数中每个数的出现次数,以及确定出现次数最多的数。涉及代码实现和基本算法应用。
摘要由CSDN通过智能技术生成

求n个数中每个数出现的次数

题目描述
从键盘读入 n 个整数(n≤100),这 n 个数都是 1 ~ 10 之间的数,请从小到大输出每个出现过的数,以 及统计出每
个数出现的次数? 比如:假设读入 5 个数,分别为 1 2 3 3 5 ,统计结果如下:1 出现 1 次,2 出现 1 次,3 出现 2 次,
5 出现 1 次。 输出格式如下:
输入
第 1 行输入一个整数 n 。
第 2 行输入 n 个整数,用空格隔开。
输出
输出若干行,每行 2 个数,用空格隔开,按照从小到大的顺序,输出每个数以
及每个数出现的次数。
#include<iostream>
using namespace std;
int a[100];
int b[50];
int main()
{
	int n;
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i = 0;i<n;i++)
	{
		b[a[i]]++;
	}
	for(int i = 1;i<=30;i++)
	{
		if(b[i]>0)
		{
			cout<<i<<" "<<b[i]<<endl;
		}
	}
	
	return 0;
 } 

声音识别

题目描述
学校王老师研发了一套新的声音识别系统,该系统预先将每位同学的学号和声音录入之后,只要同学一 说话,就知道是哪个学号的
同学在说话(不同的同学声音是完全不一样的)王老师将系统装在了教室,系统收集到了一节英语课中同学们说话的 n 个片段,并
转换为了同学们的学 号,请你编程帮助王老师计算出,有多少个同学在英语课中发过言,并按照学号由小到大,输出每位同 学的学
号及该学号的同学发言的次数。 比如,假设经过系统分析,得到如下的 88 个同学的学号分别是:8 1 6 1 8 6 7 2,表示同学们的发
言顺 序分别是:8 号、1 号、6 号、1 号、8 号、6 号、7 号、2 号,那么一共有 5位同学发过言,按照学号由 小到大输出发言次数如
下:
分别代表 1号同学发言 2次、2 号同学发言 1 次、6 号同学发言 2次、7 号同学发言 1 次、
8 号同学发言2 次。
输入
输入有 2 行,第 1 行有一个整数 n(3≤n≤10000);
第二行有 n 个数字(这些整数都是 1~100 之间的整数,含 1 和 100),数字之间用空格
隔开,代表同学们的学号。
输出
第 11 行输出 11 个整数,代表总共有多少名同学发过;
接下来输出若干行,每行 2 个整数,用空格隔开,表示按照学号由小到大输出发言同学
的学号及每位同学发言的次数。
#include<iostream>
using namespace std;
int a[10000];
int b[50];
int main()
{
	int n;
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i = 0;i<n;i++)
	{
		b[a[i]]++;
	}
	for(int i = 1;i<=30;i++)
	{
		int cnt;
		cnt++; 
		if(b[i]>0)
		{
			cout<<cnt<<endl;
			cout<<i<<" "<<b[i]<<endl;
		}
	}
	
	return 0;
 } 

数字出现次数

题目描述
有 50 个数( 0 19),求这 50个数中相同数字出现的最多次数为几次?
输入
50 个数字。
输出
1 个数字(即相同数字出现的最多次数)。
青少年编程
数字出现次数
题目描述
有 50 个数( 0 19),求这 50个数中相同数字出现的最多次数为几次?
输入
50 个数字。
输出
1 个数字(即相同数字出现的最多次数)。
#include<iostream>
using namespace std;
int a[60];
int b[50];
int main()
{
    int n;
	cin>>n; 
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i = 0;i<n;i++)
	{
		b[a[i]]++;
	}
	for(int i = 1;i<=30;i++)
	{
		if(b[i]>0)
		{
			int max;
			if(b[i]<max)
			{
				max = b[i];
			} 
			cout<<max;
		}
	}
	
	return 0;
 } 

缺失的数子

题目描述
有 n 个数字,值就是 1 ~ n ,现发现丢失了 2 个数字,请你根据剩余的 n - 2 个数字,编程计算一下,缺失的是哪
两个数字呢?
输入
第 1 行为整数 N (N≤100000)。
第 2 行有 N 2 个整数(均用空格隔开)表示了剩下 N 2 个数字的值。
输出
一行,按数字从小到大顺序输出两缺失的数字。两个数字之间用一个空格隔开

选班委

题目描述
小 T 和他的小伙伴们到 CZ 中学的创新实验班报到后的第一件事就是选班委,班主任 R
老师走上讲台宣布了选举办法,首先让全班 40 位同学依次上讲台做自我介绍,然后按照
职位一个一个依次进行选举,先选班长,再选学习委员……,选举办法是每人投一票,谁
的票数最高就选谁担任这个职位,最后围棋高手小 W 颇具大将风范被选为班长,学神小
Z 当选为学习委员那是众望所归,小 S 则有天生一副好嗓子,不但歌唱得好,并且能将
多种 动物的叫声模仿得惟妙惟肖,因此当选为文体委员。小 T 同学在本次选举中负责计
票,他 觉得手工计票太慢了,且容易出错,因此想请你编一个程序实现机器计票功能。
这个程序 要能实现以下功能:全班共有 n 个同学,依次用 1 到 n 编号,共有 m 个人
(包括班主任和 任课老师等)参与了投票,每张选票上写有一个同学的编号,得票最多
的同学当选。
输入
输入数据第一行包含两个用空格隔开的正整数 n 和 m,其中 n≤200,m≤2000。
第二行有 m 个用空格隔开的不超过 n 的正整数,表示这 m 张选票上所写的编号。
输出
输出得票最多的那个同学的编号。如果同时有两名以上同学得票最多,输出编号最小的
那个同学的编号。
#include<iostream>
using namespace std;
int a[10000010];
int b[50];
int main()
{
	int n;
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i = 0;i<n;i++)
	{
		b[a[i]]++;
	}
	for(int i = 1;i<=30;i++)
	{
		int max;
		if(i<max)
		{
			max = i;
		}
		if(b[i]>0)
		{
			cout<<max;
		}
	}
	
	return 0;
 } 

找筷子

题目描述
经过一段时间的紧张筹备,电脑小组的“RP餐厅”终于开业了,这天,经理 LXC 接到了一个定餐大单,可把大家乐坏了!
员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题,筷子!CX 小朋友找出了餐厅中所有的筷
子,但遗憾的是这些筷子长短不一,而我们都知道筷子需要长度一样的才能组成一双,更麻烦的是 CX 找出来的这些筷子
数量为奇数,但是巧合的是,这些筷子中只有一只筷子是落单的,其余都成双,善良的你,可以帮 CX 找出这只落单的筷
子的长度吗?
输入
第一行读入一个数 N,它代表 C X找到的筷子的根数。(10≤N≤10000) 第二行是 N 个用空格隔开的
数,代表筷子的长度。(筷子长度都是 1 1000 之间的整数)
输出
一行,落单的筷子的长度。
#include<iostream>
using namespace std;
int a[10010];
int b[1010];
int main()
{
	int n;
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i = 0;i<n;i++)
	{
		b[a[i]]++;
	}
	for(int i = 1;i<=30;i++)
	{
		if(b[i]%2==1)
		{
			cout<<i;
		}
	}
	
	return 0;
 } 

去除重复数字

题目描述
给你 N 个数(N≤100),每个数都在(0 1000)之间,
其中由很多重复的数字,请将重复的数字只保留一个,
并将剩下的数由小到大排序并输出。
输入
输入有 2 行;
第 1 行为 1个正整数,表示数的个数:N;
第 2 行有 N 个用空格隔开的整数。
输出
第 1 行为 1 个正整数 M,表示不相同数的个数。
接下来的 M 行,每行一个整数,表示从小到大排好序
的不相同的数
#include<iostream>
using namespace std;
int a[100];
bool b[50];
int main()
{
	int n;
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i = 0;i<n;i++)
	{
		b[a[i]]=true;
	}
	for(int i = 1;i<=30;i++)
	{
		int max;
		if(b[i]>b[i+1])
		{
			int tmp = b[i];
			b[i] = b[i+1];
			b[i+1] = tmp; 
		}
		if(b[i] == true)
		{
			cout<<i<<" "<<endl;
		}
	}
	
	return 0;
 } 

求n个数中出现次数最多的数

题目描述
从键盘读入 n 个整数( n≤100 ),这 n 个数都是 1 10 之间的数,请求出出现次数最多的数是哪个数?
比如:假设读入 5 个数,分别为 1 2 3 3 5 ,出现次数最多的数就是 3 。(本题的数据确保出现次数最多
的数只有 1 个,不存在多个数出现的次数都最多的情况)
输入
第 1 行输入一个整数 n。
第 2 行输入 n 个整数,用空格隔开。
输出
输出出现次数最多的数
#include<iostream>
using namespace std;
int a[100];
int b[50];
int main()
{
	int n;
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
	}
	for(int i = 0;i<n;i++)
	{
		b[a[i]]++;
	}
	for(int i = 1;i<=30;i++)
	{
		int max;
		if(b[i]<max)
		{
			max = b[i];
		}
		cout<<max;
	}
	
	return 0;
 } 

青少年编程
青少年编程
V 13201376357
  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值