【GESP】C++二级练习 luogu-B2094, 不与最大数相同的数字之和
二级知识点,分支/循环嵌套知识点练习。可能实现方法上未必一定需要嵌套,但是题目难度上我觉得应该可以算二级水平。
luogu-B2094
题目要求
题目描述
输出一个整数数列中不与最大数相同的数字之和。
输入格式
输入分为两行:
第一行为 $N(N$ 为接下来数的个数,$N \le 100)$;
第二行为 $N$ 个整数,数与数之间以一个空格分开,每个整数的范围是 $-1000,000$ 到 $1000,000$。
输出格式
输出为 $N$ 个数中除去最大数其余数字之和。
样例输入 #1
1
2
3
1 2 3
样例输出 #1
1
3
题目分析
这是一道的数学题,需要计算一个整数数列中除去最大数其余数字之和。我们可以使用一个循环来遍历整个数列,同时记录最大数和最大数出现的次数。最后,我们可以输出数列中除去最大数其余数字之和。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
int main() {
int n; // 定义一个整数变量n
cin >> n; // 从输入流中读取n的值
int ans = 0; // 定义一个整数变量ans,用于存储数字之和
int a; // 定义一个整数变量a,用于存储每个数
int max = 0; // 定义一个整数变量max,用于存储最大数
int max_times = 0; // 定义一个整数变量max_times,用于存储最大数出现的次数
for (int i = 1; i <= n; i++) { // 循环n次,读取每个数
cin >> a; // 从输入流中读取a的值
if (i == 1) { // 如果是第一个数
max = a; // 将a赋值给max
max_times = 1; // 最大数出现的次数为1
} else { // 如果不是第一个数
if (a > max) { // 如果a大于max
max = a; // 将a赋值给max
max_times = 1; // 最大数出现的次数为1
} else if (a == max) { // 如果a等于max
max_times++; // 最大数出现的次数加1
}
}
ans += a; // 将a加到ans上
}
cout << ans - max * max_times; // 输出ans减去max乘以max_times的值
return 0; // 返回0,表示程序执行成功
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
本文由作者按照 CC BY 4.0 进行授权