1 、与指定数字相同的数的个数( 2021 真题)
输出一个整数序列中与指定数字相同的数的个数。
输入:输入包含三行:
第一行为 N,表示整数序列的长度(N ≤ 100);
第二行为 N 个整数,整数之间以一个空格分开;
第三行包含一个整数,为指定的数字 m。
输出
输出为 N 个数中与 m 相同的数的个数。
输入样例
3
2 3 2
2
输出样例
2
#include<iostream>
using namespace std;
int main(){int N;cin>>N; int a[N];for(int i=0;i<N;i++){cin>>a[i];}int m;cin>>m;int t=0;for(int i=0;i<N;i++){if(m==a[i])t++;}cout<<t<<endl;return 0;
}
2 、陶陶摘苹果
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 个苹果。苹果成熟的时
候,陶陶就会跑去摘苹果。陶陶有个 30 厘米高的板凳,当她不能直接用手摘到苹果的
时候,就会踩到板凳上再试试。
现在已知 10 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,
请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入
包括两行数据。第一行包含 10 个 100 到 200 之间(包括 100 和 200)的整数(以厘米
为单位)分别表示 10 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二
行只包括一个 100 到 120 之间(包含 100 和 120)的整数(以厘米为单位),表示陶陶把手
伸直的时候能够达到的最大高度。
输出
包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
输入样例
100 200 150 140 129 134 167 198 200 111
110
输出样例
5
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{int i, a[10], height, num=0;for (i=0; i<10; i++) cin >> a[i];cin >> height;for (i=0; i<10; i++){if (a[i]<=height+30) num++;}cout << num << endl;
}
3 、计算书费
下面是一个图书的单价表:
计算概论 28.9 元/本
数据结构与算法 32.7 元/本
数字逻辑 45.6 元/本
C++程序设计教程 78 元/本
人工智能 35 元/本
计算机体系结构 86.2 元/本
编译原理 27.8 元/本
操作系统 43 元/本
计算机网络 56 元/本
JAVA 程序设计 65 元/本
给定每种图书购买的数量,编程计算应付的总费用。
输入:输入一行,包含 10 个整数(大于等于 0,小于等于 100),分别表示购买的《计
算概论》、《数据结构与算法》、《数字逻辑》、《
C++程序设计教程》、《人工智能》、
《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、《
JAVA 程序设
计》的数量(以本为单位)。每两个整数用一个空格分开。
输出:输出一行,包含一个浮点数 f,表示应付的总费用。精确到小数点后一位。
输入样例
1 5 8 10 5 1 1 2 3 4
输出样例
2410.2
#include<iostream>
#include<iomanip>
using namespace std;
int main(){int n=10;int a[10];float f;for(int i=0;i<n;i++){cin>>a[i];}f=a[0]*28.9+a[1]*32.7+a[2]*45.6+a[3]*78+a[4]*35+a[5]*86.2+a[6]*27.8+a[7]*43+a[8]*56+a[9]*65;cout<<f<<setprecision(1)<<endl;return 0;
}
4 、数组逆序重存放
将一个数组中的值按逆序重新存放。例如,原来的顺序为 8,6,5,4,1。要求改为
1,4,5,6,8。
输入
输入为两行:第一行数组中元素的个数 n(
1<n<100),第二行是 n 个整数,每两个
整数之间用空格分隔。
输出
输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。
输入样例
5
8 6 5 4 1
输出样例
1 4 5 6 8
#include<iostream>
using namespace std;
int main()
{int n;cin>>n;int a[n];for (int i=0; i<n; i++) cin >> a[i];for (int i=n-1; i>=0; i--) cout << a[i] << " ";return 0;
}
5 、校门外的树
某校大门外长度为 L 的马路上有一排树,每两棵相邻的树之间的间隔都是 1 米。我
们可以把马路看成一个数轴,马路的一端在数轴 0 的位置,另一端在 L 的位置;数轴上
的每个整数点,即 0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点
表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。
现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树
都移走后,马路上还有多少棵树。
输入
第一行有两个整数 L(1 ≤ L ≤ 10000)和 M(1 ≤ M ≤ 100),L 代表马路的
长度,M 代表区域的数目,L 和 M 之间用一个空格隔开。接下来的 M 行每行包含两个不
同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
对于 20%的数据,区域之间没有重合的部分;对于其它的数据,区域之间有重合的
情况。
输出
包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
输入样例
500 3
150 300
100 200
470 471
输出样例
298
#include<iostream>
using namespace std;
int main(){int L,M;cin>>L>>M;int a,b;int x[L];for(int i=0;i<=L;i++){x[i]=0;}for(int i=1;i<=M;i++){cin>>a>>b;for(int j=a;j<=b;j++){x[j]=1;}}int count=0;for(int i=0;i<=L;i++){if(x[i]==0)count++;}cout<<count<<endl;
}
6 、开关灯
假设有 N 盏灯(N 为不大于 5000 的正整数),从 1 到 N 按顺序依次编号,初始时全部
处于开启状态;有 M 个人(M 为不大于 N 的正整数)也从 1 到 M 依次编号。
第一个人(1 号)将灯全部关闭,第二个人(2 号)将编号为 2 的倍数的灯打开,第三
个人(3 号)将编号为 3 的倍数的灯做相反处理(即将打开的灯关闭,将关闭的灯打开)。
依照编号递增顺序,以后的人都和 3 号一样,将凡是自己编号倍数的灯做相反处理。
请问:当第 M 个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用
逗号间隔。
输入:输入正整数 N 和 M,以单个空格隔开。
输出:顺次输出关闭的灯的编号,其间用逗号间隔。
输入样例
10 10
输出样例
1,4,9
#include<iostream>
#include<algorithm>
using namespace std;
int main(){int n,m;cin>>n>>m;int a[n];int b[n];for(int i=1;i<=n;i++){a[i]=1;}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(i%j==0){if(a[i]==1){a[i]=0;}else if(a[i]==0){a[i]=1;}}}}int flag=1;for(int i=1;i<=n;i++){if(a[i]==0){if(flag)flag=0; elsecout<<",";cout<<i;}}return 0;
}
7 、查找特定的值
在一个序列(下标从 1 开始)中查找一个给定的值,输出第一次出现的位置。
输入
第一行包含一个正整数 n,表示序列中元素个数。1 ≤n≤ 10000。
第二行包含 n 个整数,依次给出序列的每个元素,相邻两个整数之间用单个空格隔
开。元素的绝对值不超过 10000。
第三行包含一个整数 x,为需要查找的特定值。x 的绝对值不超过 10000。
输出
若序列中存在 x,输出 x 第一次出现的下标;否则输出-1。
输入样例
5
2 3 6 7 3
3
输出样例
2
#include<iostream>
using namespace std;
int main(){int n,flag=0;cin>>n;int a[n];for(int i=1;i<=n;i++){cin>>a[i];}int m;cin>>m;for(int i=1;i<=n;i++){if(a[i]==m){flag=1;cout<<i;break;}}if(flag==0){cout<<-1;}return 0;
}
8 、最大值和最小值的差( 2021 真题)
输出一个整数序列中最大的数和最小的数的差。
输入
第一行为 M,表示整数个数,整数个数不会大于 10000;
第二行为 M 个整数,以空格隔开,每个整数的绝对值不会大于 10000。
输出
输出 M 个数中最大值和最小值的差。
输入样例
5
2 5 7 4 2
输出样例
5
#include<iostream>
using namespace std;
int main(){int M;int max,min;cin>>M;int a[M];for(int i=0;i<M;i++){cin>>a[i];}max=a[0];min=a[0];for(int i=1;i<M;i++){if(max<a[i])max=a[i];if(min>a[i])min=a[i];}cout<<max-min;return 0;
}
9 、不与最大数相同的数字之和
输出一个整数数列中不与最大数相同的数字之和。
输入
输入分为两行:
第一行为 N(N 为接下来数的个数,N ≤ 100);
第二行 N 个整数,数与数之间以一个空格分开,每个整数的范围是-1000,000 到
1000,000。
输出
输出为 N 个数中除去最大数其余数字之和。
输入样例
3
1 2 3
输出样例
3
#include<iostream>
#include<algorithm>
using namespace std;
int main(){int n;cin>>n;long a[n];long sum=0;for(int i=0;i<n;i++){cin>>a[i];}sort(a,a+n);for(int i=0;i<n-1;i++){sum+=a[i];}cout<<sum;return 0;
}
10 、白细胞计数 (高难度 仅供挑战)
医院采样了某临床病例治疗期间的白细胞数量样本 n 份,用于分析某种新抗生素对
该病例的治疗效果。为了降低分析误差,要先从这 n 份样本中去除一个数值最大的样本
和一个数值最小的样本,然后将剩余 n-2 个有效样本的平均值作为分析指标。同时,为
了观察该抗生素的疗效是否稳定,还要给出该平均值的误差,即所有有效样本(即不包
括已扣除的两个样本)与该平均值之差的绝对值的最大值。
现在请你编写程序,根据提供的 n 个样本值,计算出该病例的平均白细胞数量和对
应的误差。
输入:输入的第一行是一个正整数 n(
2 <n≤ 300),表明共有 n 个样本。
以下共有 n 行,每行为一个浮点数,为对应的白细胞数量,其单位为 10^9/L。数与
数之间以一个空格分开。
输出:输出为两个浮点数,中间以一个空格分开。分别为平均白细胞数量和对应的
误差,单位也是 10^9/L。计算结果需保留到小数点后 2 位。
输入样例 内部资料 请勿外传 翻印必究
第 86 页 共 251 页
5
12.0
13.0
11.0
9.0
10.0
输出样例:11.00 1.00
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int main(){int n;float sum=0.0;cin>>n;float a[n],b[n-2];for(int i=0;i<n;i++){cin>>a[i];}sort(a,a+n);for(int i=1;i<n-1;i++){sum+=a[i];}float avg=sum/(n-2);for(int i=1;i<n-1;i++){b[i]=abs(a[i]-avg);}sort(b,b+n-2);cout<<fixed<<setprecision(2)<<avg<<" "<<b[n-2];return 0;
}