C++ 算法题:三个正整数 (枚举)
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;
}
- 输入数据: 使用
cin从标准输入读取 'N'、'M' 和 'N' 个正整数。 - 排序: 使用
sort函数对输入的正整数数组进行降序排序,确保前三个数最大。 - 计算最大和: 将排序后的数组的前三个元素相加,得到最大总和。
- 输出结果: 使用
cout输出最大总和。
总结
本题使用枚举法,通过排序选取最大的三个数,并计算它们的和,即可得到结果。代码简洁易懂,体现了算法的思想。
原文地址: https://www.cveoy.top/t/topic/qe9c 著作权归作者所有。请勿转载和采集!