C++ 算法题:三个正整数 (枚举)

题目描述

从 'N' 个正整数中选出 '3' 个使他们的和在不超过 'M' 的同时尽可能的大。

输入格式

第一行包含两个正整数 'N' (3 ≤ N ≤ 10^2), 'M' (10 ≤ M ≤ 300000)。

第二行包括 'N' 个不大于 10^5 的正整数。

数据保证至少存在 3 个正整数的和不超过 'M'。

输出格式

输出一行包含可以得到的最大总和。

输入输出样例

样例 1

输入样例:

5 21
5 6 7 8 9

输出样例:

21

样例 2

输入样例:

10 500
93 181 245 214 315 36 185 138 216 295

输出样例:

497

代码解析

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int N, M;
    cin >> N >> M;
    vector<int> nums(N);
    for (int i = 0; i < N; i++) {
        cin >> nums[i];
    }
    sort(nums.begin(), nums.end(), greater<int>());
    int sum = 0;
    for (int i = 0; i < 3; i++) {
        sum += nums[i];
    }
    cout << sum << endl;
    return 0;
}
  1. 输入数据: 使用 cin 从标准输入读取 'N'、'M' 和 'N' 个正整数。
  2. 排序: 使用 sort 函数对输入的正整数数组进行降序排序,确保前三个数最大。
  3. 计算最大和: 将排序后的数组的前三个元素相加,得到最大总和。
  4. 输出结果: 使用 cout 输出最大总和。

总结

本题使用枚举法,通过排序选取最大的三个数,并计算它们的和,即可得到结果。代码简洁易懂,体现了算法的思想。

C++ 算法题:三个正整数 (枚举)

原文地址: https://www.cveoy.top/t/topic/qe9c 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录