求n个数中每个数出现的次数
题目描述:从键盘读入n 个整数(n≤100),这n 个数都是1 ~ 10 之间的数,请从小到大输出每个出现过的数,以及统计出每个数出现的次数?比如:假设读入5 个数,分别为1 2 3 3 5 ,统计结果如下:1 出现1 次,2 出现1 次,3 出现2 次,5 出现1 次。输出格式如下:
1 1
2 1
3 2
5 1
输入第1 行输入一个整数n 。第2 行输入n 个整数,用空格隔开。输出输出若干行,每行2 个数,用空格隔开,按照从小到大的顺序,输出每个数以及每个数出现的次数。
输入复制
5
1 2 3 3 5
输出复制
1 1
2 1
3 2
5 1
#include<iostream>
using namespace std;
int main()
{
int a[100]={0};
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int s;
cin>>s;
a[s]++;
}
for(int i=1;i<=n;i++)
{
if(a[i]!=0)
{
cout<<i<<" "<<a[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
分别代表1号同学发言2次、2 号同学发言1 次、6 号同学发言2次、7 号同学发言1 次、8 号同学发言2 次。输入输入有2 行,第1 行有一个整数n(3≤n≤10000);第二行有n 个数字(这些整数都是1~100 之间的整数,含1 和100),数字之间用空格隔开,代表同学们的学号。输出第11 行输出11 个整数,代表总共有多少名同学发过;接下来输出若干行,每行2 个整数,用空格隔开,表示按照学号由小到大输出发言同学的学号及每位同学发言的次数。
输入复制
8
8 1 6 1 8 6 7 2
输出复制
1 2
2 1
6 2
7 1
8 2
#include<iostream>
using namespace std;
int main()
{
int a[100]={0};
int n;
cin>>n;
int cnt=0;
int max=-1;
for(int i=1;i<=n;i++)
{
int s;
cin>>s;
a[s]++;
if(s>max)
{
max=s;
}
}
for(int i=0;i<=max;i++)
{
if(a[i]!=0)
{
cnt++;
}
}
cout<<cnt<<endl;
for(int i=1;i<=max;i++)
{
if(a[i]!=0)
{
cout<<i<<" "<<a[i]<<endl;
}
}
return 0;
}
数字出现次数
题目描述:有50 个数(0∼19),求这50个数中相同数字出现的最多次数为几次?输入50 个数字。输出1 个数字(即相同数字出现的最多次数)。
输入复制
1 10 2 0 15 8 12 7 0 3 15 0 15 18 16 7 17 16 9 1 19 16 12 17 12 4 3 11 1 14 2 11 14 6 11 4 6 4 11 13 18 7 0 3 2 3 18 19 2 16(不需要换行)
输出复制
4
#include<iostream>
using namespace std;
int main()
{
int a[100]={0};
int n=50;
int max=-1;
int maxi=-1;
for(int i=1;i<=n;i++)
{
int s;
cin>>s;
a[s]++;
if(a[s]>maxi)
{
max=s;
maxi=a[s];
}
}
cout<<max;
return 0;
}
缺失的数子
题目描述:有n 个数字,值就是1 ~ n ,现发现丢失了2 个数字,请你根据剩余的n -2 个数字,编程计算一下,缺失的是哪两个数字呢?输入第1 行为整数N (N≤100000)。第2 行有N−2 个整数(均用空格隔开)表示了剩下N−2 个数字的值。输出一行,按数字从小到大顺序输出两缺失的数字。两个数字之间用一个空格隔开。
输入复制
6
4 1 3 5
输出复制
2 6
#include<iostream>
using namespace std;
int main()
{
int a[100]={0};
int n;
cin>>n;
for(int i=0;i<n-2;i++)
{
int s;
cin>>s;
a[s]=s;
}
for(int i=1;i<=n;i++)
{
if(a[i]==0)
{
cout<<i<<" ";
}
}
return 0;
}
选班委
题目描述:小T 和他的小伙伴们到CZ 中学的创新实验班报到后的第一件事就是选班委,班主任R 老师走上讲台宣布了选举办法,首先让全班40 位同学依次上讲台做自我介绍,然后按照职位一个一个依次进行选举,先选班长,再选学习委员......,选举办法是每人投一票,谁的票数最高就选谁担任这个职位,最后围棋高手小W 颇具大将风范被选为班长,学神小Z 当选为学习委员那是众望所归,小S 则有天生一副好嗓子,不但歌唱得好,并且能将多种动物的叫声模仿得惟妙惟肖,因此当选为文体委员。小T 同学在本次选举中负责计票,他觉得手工计票太慢了,且容易出错,因此想请你编一个程序实现机器计票功能。这个程序要能实现以下功能:全班共有n 个同学,依次用1 到n 编号,共有m 个人(包括班主任和任课老师等)参与了投票,每张选票上写有一个同学的编号,得票最多的同学当选。输入输入数据第一行包含两个用空格隔开的正整数n 和m,其中n≤200,m≤2000。第二行有m 个用空格隔开的不超过n 的正整数,表示这m 张选票上所写的编号。输出输出得票最多的那个同学的编号。如果同时有两名以上同学得票最多,输出编号最小的那个同学的编号。
输入复制
3 4
1 3 2 1
输出复制
1
#include<iostream>
using namespace std;
int main()
{
int a[100]={0};
int n,m;
cin>>n>>m;
int max=-1;
int maxi=-1;
for(int i=1;i<=m;i++)
{
int s;
cin>>s;
a[s]++;
if(a[s]>maxi)
{
maxi=a[s];
max=s;
}
}
cout<<max;
return 0;
}
夏令营小旗手
题目描述:夏令营在实验小学进行,组委会决定在实验小学的学生中推选一名小旗手,推选方法如下:实验小学有n 名学生(1≤n≤1000)。每名学生有一个学号,学号为1,2,...n。同时,每名同学有一张选票,可以推选一名同学为小旗手。最后,得票最多者当选,若得票最多者相同票数,则学号小者当选。例如,选票为2 3 4 4 3 4 1 6,4号学生得票最多(3票)当选小棋手。输入第1 行读入n,x1 两个整数,n为学生数,x1 为第一个选票上的学号,之后的选票x i(i≥2)由下面的递推关系给出:
x i =(x i−1 ×37+33031) mod n+1
其中mod 为取余运算,例如,13 mod 8=5,21 mod 21=0。根据这个公式,就能从x1推出x2,x3,...xn。(在C++中,“%”代表取余运算)
输入复制
5 2
输出复制
2
#include<iostream>
using namespace std;
int main()
{
int a[100]={0};
int n;
cin>>n;
int v;
cin>>v;
int max=-1;
int maxi=-1;
for(int i=0;i<n;i++)
{
a[v]++;
if(a[v]>maxi)
{
maxi=a[v];
max=v;
}
v=(v-1*37+33031)%n+1;
}
cout<<max;
return 0;
}
求N个整数的平均数、众数和中位数
题目描述:求N 个整数的平均数,众数和中位数。小知识:
1. 众数
如有9 个数:17,13,17,9,17,17,3,16,17,其中17 出现的次数最多,即为这组数的众数。(本题确保测试数据中,出现次数最多的数只有一个)
2. 中位数
如有9 个数:102,170,96,90,97,106,110,182,100。将这9个数按一定的顺序(从大到小或从小到大)排列后得到:182,170,110,106,102,100,97,96,90。正中间的一个数是102 ,102 是这组数的中位数。而这10 个数:106,99,104,120,107,112,33,102,97,100。按一定顺序排列后得到:120,112,107,106,104,102,100,99,97,33。正中间有两个数:104,102 ,中位数就是这两个数的平均数,即(104+102)/2=103.0 。输入第一行为整数N (5≤N≤10000 );第二行为空格隔开的N 个数Ai (0≤Ai≤100)。输出输出空格隔开的平均数众数中位数(平均数保留两位小数,中位数保留一位小数)。
(平均数大家应该都知道)
输入复制
6
5 2 2 3 4 6
输出复制
3.67 2 3.5
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
float a[100];
int b[100];
float c[100];
int n;
int lb=0;
cin>>n;
float sum=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
sum=sum+a[i];
}
for(int i=0;i<n;i++)
{
bool f=true;
for(int j=0;j<lb;j++)
{
if(a[i]==b[j])
{
f=false;
c[j]++;
break;
}
}
if(f==true)
{
b[lb]=a[i];
c[lb]=1;
lb++;
}
}
int tmp;
for(int i=0;i<lb-1;i++)
{
for(int j=0;j<lb-1-i;j++)
{
if(c[j]<c[j+1])
{
tmp=c[j];
c[j]=c[j+1];
c[j+1]=tmp;
tmp=b[j];
b[j]=b[j+1];
b[j+1]=tmp;
}
}
}
float q=sum/n;
cout<<fixed<<setprecision(2)<<q<<" ";
cout<<b[0]<<" ";
if(n%2==0)
{
int x=n/2;
int y=(n+2)/2;
float z=(a[x]+a[y])/2;
cout<<fixed<<setprecision(1)<<z;
}
else if(n%2==1)
{
float s=(n+1)/2;
cout<<fixed<<setprecision(1)<<s;
}
return 0;
}
找筷子
题目描述:经过一段时间的紧张筹备,电脑小组的“RP餐厅”终于开业了,这天,经理LXC 接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题,筷子!CX 小朋友找出了餐厅中所有的筷子,但遗憾的是这些筷子长短不一,而我们都知道筷子需要长度一样的才能组成一双,更麻烦的是CX 找出来的这些筷子数量为奇数,但是巧合的是,这些筷子中只有一只筷子是落单的,其余都成双,善良的你,可以帮CX 找出这只落单的筷子的长度吗?输入第一行读入一个数N,它代表C X找到的筷子的根数。(10≤N≤10000)第二行是N 个用空格隔开的数,代表筷子的长度。(筷子长度都是1∼1000 之间的整数)输出一行,落单的筷子的长度。
输入复制
9
2 2 1 3 3 3 2 3 1
输出复制
2
#include<iostream>
using namespace std;
int main()
{
int a[100]={0};
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int s;
cin>>s;
a[s]++;
}
for(int i=1;i<=n;i++)
{
if(a[i]%2==1)
{
cout<<i<<" ";
}
}
return 0;
}
去除重复数字
题目描述:给你N 个数(N≤100),每个数都在(0∼1000)之间,其中由很多重复的数字,请将重复的数字只保留一个,并将剩下的数由小到大排序并输出。输入输入有2 行;第1 行为1个正整数,表示数的个数:N;第2 行有N 个用空格隔开的整数。输出第1 行为1 个正整数M,表示不相同数的个数。接下来的M 行,每行一个整数,表示从小到大排好序的不相同的数。
输入复制
10
20 40 32 67 40 20 89 300 400 15
输出复制
8
15
20
32
40
67
89
300
400
#include<iostream>
using namespace std;
int main()
{
int a[100]={0};
int n;
cin>>n;
int cnt=0;
int max=-1;
for(int i=1;i<=n;i++)
{
int s;
cin>>s;
a[s]++;
if(s>max)
{
max=s;
}
}
for(int i=0;i<=max;i++)
{
if(a[i]!=0)
{
cnt++;
}
}
cout<<cnt<<endl;
for(int i=1;i<=max;i++)
{
if(a[i]!=0)
{
cout<<i<<" "<<a[i]<<endl;
}
}
return 0;
}
求n个数中出现次数最多的数
题目描述:从键盘读入n 个整数(n≤100 ),这n 个数都是1∼10 之间的数,请求出出现次数最多的数是哪个数?比如:假设读入5 个数,分别为1 2 3 3 5 ,出现次数最多的数就是3 。(本题的数据确保出现次数最多的数只有1 个,不存在多个数出现的次数都最多的情况)输入第1 行输入一个整数n。第2 行输入n 个整数,用空格隔开。输出输出出现次数最多的数。
输入复制
5
1 2 3 3 5
输出复制
3
#include<iostream>
using namespace std;
int main()
{
int a[100]={0};
int n;
cin>>n;
int max=-1;
int maxi=-1;
for(int i=1;i<=n;i++)
{
int s;
cin>>s;
a[s]++;
if(a[s]>maxi)
{
max=s;
maxi=a[s];
}
}
cout<<max;
return 0;
}