文章目录
一、前言
本章节主要对数组基础的问题进行讲解,包括《1423 - 考试成绩的简单统计》《1153 - 查找“支撑数”》《1156 - 排除异形基因》《1155 - 找找谁的身高超过全家的平均身高》《1231 - 考试成绩的分布情况》题目。
二、问题
问题:1423 - 考试成绩的简单统计
类型:数组基础
题目描述:
期末考试结束,王老师想知道这次考试中成绩优秀的同学有多少人(考试成绩大于或等于
90 表示成绩优秀),请你编程帮助王老师来计算出成绩优秀的人数。
输入:
第一行,一个整数 n 代表有 n 个人的成绩( n≤100);
第二行,n个人的成绩,用空格隔开。
输出:
成绩优秀的同学的总人数。
样例:
输入:
5
98 88 85 99 90
输出:
3
1.分析问题
- 已知:n个人的成绩。
- 未知:成绩优秀的同学有多少人。
- 关系:大于或等于 90 表示成绩优秀。
2.定义变量
根据分析的已知,未知按需要定义变量。
- n:n个人的成绩。
- a[100]:数组,存储具体成绩数值。
- count:成绩优秀的同学人数。
//二、数据定义
int n,a[100],count=0;
3.输入数据
- 通过遍历的方式,循环录入学生成绩。
//三、数据输入
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
4.数据计算
- 大于或等于 90 表示成绩优秀,统计个数即可。
//四、数据计算
if(a[i]>=90){
count++;
}
5.输出结果
- 输出成绩优秀的人数。
//五、输出结果
cout<<count<<endl;
完整代码如下:
#include<iostream> // 引入iostream库,以便使用输入输出流对象如cin和cout
using namespace std; // 使用std命名空间,这样可以直接调用其中的函数和对象,而无需每次都加std::
int main(){ // 定义主函数main,程序执行的入口点
// 一、分析问题
// 已知:n个人的成绩
// 未知:成绩优秀的同学有多少人
// 二、数据定义
int n, a[100], count = 0; // 定义变量n为学生总数,数组a用于存储n个学生的成绩,count用来计数成绩优秀的学生
// 三、数据输入
cin >> n; // 从标准输入读取学生总人数n
for(int i = 0; i < n; i++){ // 使用for循环遍历每一个学生
cin >> a[i]; // 输入第i个学生的成绩并存入数组a[i]
// 四、数据计算
if(a[i] >= 90){ // 判断当前学生的成绩是否大于等于90分,视为成绩优秀
count++; // 如果成绩优秀,则计数器count加1
}
}
// 五、输出结果
cout << count << endl; // 输出成绩优秀的学生人数到标准输出
return 0; // 主函数结束,返回0表示程序正常退出
}
问题:1153 - 查找“支撑数”
类型:数组基础
题目描述:
在已知一组整数中,有这样一种数非常怪,它们不在第一个,也不在最后一个,而且刚好都比左边和右边相邻的数大,你能找到它们吗?
输入:
第一行为整数 m,表示输入的整数个数。( 3≤m≤100 )
第二行为 m 个整数。
输出:
若干个支撑数,每行一个。
样例:
输入:
14
1 3 2 4 1 5 3 9 7 10 8 23 85 43
输出:
3
4
5
9
10
85
1.分析问题
- 已知:一组整数
- 未知:支撑数
- 关系:比左边和右边相邻的数大的数
2.定义变量
- 根据分析的已知,未知按需要定义变量。
- n:n个整数
- a[100]:用来存储n个整数数值。
//二、数据定义
int n,a[100];
3.输入数据
- 从键盘读入。
//三、数据输入
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
4.数据计算
- 同时满足比左边和右边相邻的数大,注意第一个数(索引为0)左边没有数,所以应该从第二个数开始判断(索引为1)。
//四、数据计算
for(int i=1;i<n-1;i++){
if(a[i-1]<a[i]&&a[i]>a[i+1]){
}
}
5.输出结果
- 如果满足条件,输出该元素
// 五、输出结果
cout << a[i] << endl;
完整代码如下:
#include<iostream> // 引入iostream头文件,提供输入输出功能
using namespace std; // 使用标准命名空间std
int main() { // 定义主函数
// 一、分析问题
// 已知:一组整数
// 未知:刚好都比左边和右边相邻的数大的数
// 二、数据定义
int n, a[100]; // 定义变量n为数组元素个数,数组a用于存储这组整数
// 三、数据输入
cin >> n; // 读取整数n,表示数组中有n个元素
for (int i = 0; i < n; i++) {
cin >> a[i]; // 依次输入n个整数到数组a中
}
// 四、数据计算
for (int i = 1; i < n - 1; i++) { // 遍历数组,但不检查第一个和最后一个元素,因为它们没有两个相邻的数
if (a[i - 1] < a[i] && a[i] > a[i + 1]) { // 检查当前元素是否大于它左右两边的元素
// 五、输出结果
cout << a[i] << endl; // 如果满足条件,输出该元素
}
}
return 0; // 程序正常结束
}
问题:1156 - 排除异形基因
类型:数组基础
题目描述:
神舟号飞船在完成宇宙探险任务回到地球后,宇航员张三感觉身体不太舒服,去了医院检查,医生诊断结果:张三体内基因已被改变,原有人体基因序列中已经被渗入外星球不明异形生物基因,但可喜的是,这些异形基因都有一个共同的特征,就是该基因序号的平方除以 7 的余数都是 1,要赶快清除掉,否则会危害整个人类。赶快行动吧。
输入:
第一行是一个整数 n (基因个数 3≤n≤200);
第二行是 n 个整数(张三的基因序列)。
输出:
去除异形基因后的正常序列,空格隔开。
样例:
输入:
4
6 2 8 12
输出:
2 12
1.分析问题
- 已知:人体基因序列。
- 未知:异形基因。
- 关系:基因序号的平方除以 7 的余数是否等于 1。
2.定义变量
- 根据分析的已知,未知按需要定义变量。
//二、数据定义
int n,a[200];
3.输入数据
- 从键盘读入。
//三、数据输入
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
4.数据计算
- 基因序号的平方除以 7 的余数等于 1是异形基因。
//四、数据计算
if(a[i]*a[i]%7!=1){
}
5.输出结果
- 如果余数不等于1,则输出该整数。
// 五、输出结果
cout << a[i] << " ";
完整代码如下:
#include<iostream>
using namespace std;
int main() {
// 一、分析问题
// 已知:人体基因序列(这里以整数序列简化表示)
// 未知:对于给定序列中的每个整数,其平方除以7的余数是否不等于1
// 二、数据定义
int n, a[200]; // 定义n为基因序列的长度,a数组用于存储基因序列中的整数
// 三、数据输入
cin >> n; // 输入基因序列的长度n
for (int i = 0; i < n; i++) {
cin >> a[i]; // 输入基因序列中的每个整数
// 四、数据计算
if (a[i] * a[i] % 7 != 1) { // 计算当前整数的平方除以7的余数,检查是否不等于1
// 五、输出结果
cout << a[i] << " "; // 如果余数不等于1,则输出该整数
}
}
// 六、程序结束,无额外操作
return 0; // 表示程序成功执行完毕
}
问题:1155 - 找找谁的身高超过全家的平均身高
类型:数组基础
题目描述:
找找谁的身高超过全家的平均身高。
全家 n 口人,输入输出数据如下: (平均身高保留一位小数)。
输入:
第一行有一个整数 n ( 1<n<11 );
第二行是 n 个整数,用空格隔开。
输出:
第一行为全家的平均身高(保留一位小数);
第二行有若干个数,为超过平均身高的人的身高厘米数。
样例:
输入:
7
175 160 172 158 178 162 142
输出:
AVE=163.9
1:175 3:172 5:178
1.分析问题
- 已知:全家的身高。
- 未知:谁的身高超过全家的平均身高。
- 关系:平均身高=全家的身高/人数。
2.定义变量
- 根据分析的已知,未知按需要定义变量。
- ave:平均身高。
//二、数据定义
int n,a[100];
double ave=0;
3.输入数据
- 从键盘读入。
- 先将全家的身高进行累加。
//三、数据输入
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
ave+=a[i];
}
4.数据计算
- 第一行为全家的平均身高(保留一位小数);
- 并判断谁的身高超过全家的平均身高。
//四、数据计算
ave/=n;
printf("AVE=%.1f\n",+ave);
for(int i=0;i<n;i++){
if(a[i]*1.0 > ave){
}
}
5.输出结果
- 检查当前成员身高是否超过平均身高。
- 打印超过平均身高的成员序号和身高。
// 五、输出结果
for (int i = 0; i < n; i++) {
if (a[i] * 1.0 > ave) {
cout << i + 1 << ":" << a[i] << " ";
}
}
完整代码如下:
#include<iostream>
using namespace std;
int main() {
// 一、分析问题
// 已知:全家的身高
// 未知:谁的身高超过全家的平均身高
// 二、数据定义
int n, a[100]; // n为家庭成员数量,a数组用于存储每个成员的身高
double ave = 0; // ave用于存储家庭成员身高的平均值
// 三、数据输入
cin >> n; // 输入家庭成员的数量
for (int i = 0; i < n; i++) {
cin >> a[i]; // 输入每个家庭成员的身高,并累加到ave中
ave += a[i];
}
// 四、数据计算
ave /= n; // 计算平均身高
printf("AVE=%.1f\n", +ave); // 打印平均身高,保留一位小数
// 五、输出结果
for (int i = 0; i < n; i++) {
if (a[i] * 1.0 > ave) { // 检查当前成员身高是否超过平均身高
cout << i + 1 << ":" << a[i] << " "; // 打印超过平均身高的成员序号和身高
}
}
return 0; // 程序结束
}
问题:1231 - 考试成绩的分布情况
类型:数组基础
题目描述:
期末考试结束,小明的语文老师想知道,这次考试的成绩分布情况,主要计算如下几个数据:平均分、≥ 平均分的总人数、 < 平均分的总人数,请你写程序帮助小明的语文老师来计算一下!
输入:
第一行,一个整数 n 代表有 n 个人的成绩( n≤100 );
第二行, n 个人的语文成绩。
输出:
3 个值,分别代表平均分、≥ 平均分的总人数、< 平均分的总人数,请注意,平均分保留
1 位小数!
样例:
输入:
5
100 98 97 99 90
输出:
96.8 4 1
1.分析问题
- 已知:考试的成绩分布情况。
- 未知:平均分、≥平均分的总人数exceedP、 < 平均分的总人数n-exceedP。
2.定义变量
- 声明整型变量n(学生人数)、整型数组a(存放学生成绩)和exceedP(超过平均分的学生人数),以及双精度浮点数ave(平均分)。
//二、数据定义
int n,a[1000],exceedP=0;
double ave=0;
3.输入数据
- 先输入学生人数n,然后通过循环输入每个学生的成绩到数组a中,同时累加成绩到ave变量中以准备计算平均分。
//三、数据输入
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
ave+=a[i];
}
4.数据计算
- 计算平均分,将成绩总和ave除以学生人数n。
- 统计超过平均分的学生人数:遍历成绩数组,如果当前成绩大于平均分,则exceedP加1。
//四、数据计算
ave/=n;//算出平均分
for(int i=0;i<n;i++){
if(a[i]*1.0>ave){
exceedP++;
}
}
5.输出结果
- 输出平均分,超过平均分的学生人数(exceedP)和低于等于平均分的学生人数(总人数n减去超过平均分的人数exceedP)。
//五、输出结果
printf("%.1f\t",ave);
cout<<exceedP<<" "<<n-exceedP;
完整代码如下:
#include <iostream> // 引入iostream库,以便使用输入输出流对象cin和cout
using namespace std; // 使用标准命名空间std,简化代码中的命名空间限定符
int main() { // 定义主函数
// 一、分析问题
// 已知:一组学生的考试成绩
// 未知:这些学生的平均成绩、高于平均分的学生人数、低于等于平均分的学生人数
// 二、数据定义
int n, a[1000]; // n为学生人数,a数组用于存储每个学生的成绩
int exceedP = 0; // 初始化超过平均分的学生人数为0
double ave = 0; // 初始化平均分为0
// 三、数据输入
cin >> n; // 输入学生人数
for (int i = 0; i < n; i++) {
cin >> a[i]; // 输入每个学生的成绩
ave += a[i]; // 累加成绩以计算平均分
}
// 四、数据计算
ave /= n; // 计算平均分,即成绩总和除以学生人数
// 统计高于平均分的学生人数
for (int i = 0; i < n; i++) {
if (a[i] > ave) { // 如果成绩大于平均分
exceedP++; // 超过平均分的学生人数加1
}
}
// 五、输出结果
// 使用printf函数输出平均分,保留一位小数
printf("%.1f\t", ave);
// 使用cout输出超过平均分的学生人数和低于等于平均分的学生人数
cout << exceedP << " " << (n - exceedP);
return 0; // 程序执行完毕,返回0表示成功
}
三、感谢
如若本文对您的学习或工作有所启发和帮助,恳请您给予宝贵的支持——轻轻一点,为文章点赞;若觉得内容值得分享给更多朋友,欢迎转发扩散;若认为此篇内容具有长期参考价值,敬请收藏以便随时查阅。
每一次您的点赞、分享与收藏,都是对我持续创作和分享的热情鼓励,也是推动我不断提供更多高质量内容的动力源泉。期待我们在下一篇文章中再次相遇,共同攀登知识的高峰!