文章

【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 进行授权