目录
缺失的数子 夏令营小旗手
选班委 求N个整数的平均数、众数和中位数
数字出现次数 找筷子
声音识别 去除重复数字
求n个数中每个数出现的次数 数字出现次数
COUNT 求n个数中出现次数最多的数
COUNT
题目描述
一本书的页数为 N ,页码从 1 开始编起,请你求出全部页码中,用了多少
个0,1,2…9 。
输入
一个正整数 N (N≤10000 ),表示总的页码。
输出
共十行:第 k 行为数字 k−1 的个数。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void statNum(long long sn[10], long long n) {
long long i, c, k, s, pown;
for (int i = 0; i < 10; i++)
sn[i] = 0;
for (k = s = 0, pown = 1; n > 0; k++, n /= 10, pown *= 10) {
c = n % 10;
for (i = 0; i < 10; i++)
sn[i] += c * k * pown / 10;
for (i = 0; i < c; i++)
sn[i] += pown;
sn[c] += 1 + s;
sn[0] -= pown;
s += c * pown;
}
}
int main(int argc, char *argv[]) {
long long sn[10], i, n;
while (cin >> n) {
if (argc > 1)
n = atoi(argv[1]);
statNum(sn, n);
for (i = 0; i < 10; i++)
cout << sn[i] << endl;
}
return 0;
}
求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 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 次。
输入
输入有 2 行,第 1 行有一个整数 n(3≤n≤10000);
第二行有 n 个数字(这些整数都是 1~100 之间的整数,含 1 和 100),数字之间用空格
隔开,代表同学们的学号。
输出
第 11 行输出 11 个整数,代表总共有多少名同学发过;
接下来输出若干行,每行 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]!=0)
{
cout<<i<<" "<<a[i]<<endl;
}
}
return 0;
}
数字出现次数
题目描述
有 50 个数( 0∼19),求这 50个数中相同数字出现的最多次数为几次?
输入
50 个数字。
输出
1 个数字(即相同数字出现的最多次数)。
#include<iostream>
using namespace std;
int main()
{
int i,a[20]={0},b[50];
for(i=0;i<50;i++){
cin>>b[i];
a[b[i]]++;}
int max=0;
for(i=0;i<20;i++){if(a[i]>max)
max=a[i];
}
cout<<max;
}
选班委
题目描述
小 T 和他的小伙伴们到 CZ 中学的创新实验班报到后的第一件事就是选班委,班主任 R
老师走上讲台宣布了选举办法,首先让全班 40 位同学依次上讲台做自我介绍,然后按照
职位一个一个依次进行选举,先选班长,再选学习委员……,选举办法是每人投一票,谁
的票数最高就选谁担任这个职位,最后围棋高手小 W 颇具大将风范被选为班长,学神小
Z 当选为学习委员那是众望所归,小 S 则有天生一副好嗓子,不但歌唱得好,并且能将
多种 动物的叫声模仿得惟妙惟肖,因此当选为文体委员。小 T 同学在本次选举中负责计
票,他 觉得手工计票太慢了,且容易出错,因此想请你编一个程序实现机器计票功能。
这个程序 要能实现以下功能:全班共有 n 个同学,依次用 1 到 n 编号,共有 m 个人
(包括班主任和 任课老师等)参与了投票,每张选票上写有一个同学的编号,得票最多
的同学当选。
输入
输入数据第一行包含两个用空格隔开的正整数 n 和 m,其中 n≤200,m≤2000。
第二行有 m 个用空格隔开的不超过 n 的正整数,表示这 m 张选票上所写的编号。
输出
输出得票最多的那个同学的编号。如果同时有两名以上同学得票最多,输出编号最小的
那个同学的编号。
#include<bits/stdc++.h>
using namespace std;
int n,m,t,maxn=INT_MIN,b;
int main(){
cin>>n>>m;
int a[m+5]={0};
for(int i=1;i<=m;++i)
{
cin>>t;
a[t]++;
}
for(int i=1;i<=n;++i)
{
if(a[i]>maxn)
{
maxn=a[i];
b=i;
}
}
cout<<b<<endl;
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。
#include<bits/stdc++.h>
using namespace std;
int n,m,t,maxn=INT_MIN,b;
int main(){
cin>>n>>m;
int a[m+5]={0};
for(int i=1;i<=m;++i)
{
cin>>t;
a[t]++;
}
for(int i=1;i<=n;++i)
{
if(a[i]>maxn)
{
maxn=a[i];
b=i;
}
}
cout<<b<<endl;
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)。
输出
输出空格隔开的平均数 众数 中位数(平均数保留两位小数,中位数保留一位小数)。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int b[100],lb=0,n;
float a[100],c[100],sum=0;
cin>>n;
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++;
}
}
for(int i=0;i<lb;i++){
for(int j=0;j<lb-1-i;j++){
if(c[j]<c[j+1]){
swap(c[j],c[j+1]);
swap(b[j],b[j+1]);
}
}
}
float p=sum/n;
cout<<fixed<<setprecision(2)<<p<<" ";
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;
}
}
找筷子
题目描述
经过一段时间的紧张筹备,电脑小组的“RP餐厅”终于开业了,这天,经理 LXC 接到了一个定餐大单,可把大家乐坏了!
员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题,筷子!CX 小朋友找出了餐厅中所有的筷
子,但遗憾的是这些筷子长短不一,而我们都知道筷子需要长度一样的才能组成一双,更麻烦的是 CX 找出来的这些筷子
数量为奇数,但是巧合的是,这些筷子中只有一只筷子是落单的,其余都成双,善良的你,可以帮 CX 找出这只落单的筷
子的长度吗?
输入
第一行读入一个数 N,它代表 C X找到的筷子的根数。(10≤N≤10000) 第二行是 N 个用空格隔开的
数,代表筷子的长度。(筷子长度都是 1∼1000 之间的整数)
输出
一行,落单的筷子的长度。
#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!=0)
{
cout<<i;
}
}
return 0;
}
去除重复数字
题目描述
给你 N 个数(N≤100),每个数都在(0∼1000)之间,
其中由很多重复的数字,请将重复的数字只保留一个,
并将剩下的数由小到大排序并输出。
输入
输入有 2 行;
第 1 行为 1个正整数,表示数的个数:N;
第 2 行有 N 个用空格隔开的整数。
输出
第 1 行为 1 个正整数 M,表示不相同数的个数。
接下来的 M 行,每行一个整数,表示从小到大排好序
的不相同的数。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
if(a%10!=b%10)
return a%10<b%10;
else
return a<b;
}
int main()
{
int T,i,j,m,k=-1;
int list[1001],s[100];
for(i=0;i<1001;i++)
list[i]=0;
scanf("%d",&T);
while(T--)
{
k++;
int n;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&m);
if(list[m]!=1)
list[m]=1;
}
for(i=0,j=0;i<1001;i++)
{
if(list[i]==1)
s[j++]=i;
}
sort(s,s+j,cmp);
printf("case #%d:\n",k);
for(i=0;i<j;i++)
{
if(i!=j-1)
printf("%d ",s[i]);
else
printf("%d\n",s[i]);
}
}
return 0;
}
没了
标签:同学,二级,统计法,10,int,个数,数组,100,include From: https://blog.csdn.net/h112316/article/details/144171558