求助:基于已实现的最值查找,完成C++程序求解A、B、C的值
解决从7个组合数中求解A、B、C的C++问题
嘿,我看你已经搞定了数组的最值查找,接下来咱们把剩下的逻辑补上就行!先理清楚这7个数的规律:给定的7个数是A、B、C、A+B、B+C、C+A、A+B+C,如果A、B、C都是正整数的话,最大的那个数肯定是A+B+C——毕竟三个数的和肯定比单个或两个数的和大嘛,你之前找到的max就是这个总和,咱们记它为sum_abc。
接下来的核心思路很清晰:
- 从输入数组里选两个数当作A和B,计算出C = sum_abc - A - B
- 验证这三个数是否符合要求:A、B、C必须都在输入数组里,同时A+B、B+C、C+A也得是数组里的元素
因为题目保证输入是合法的,所以只要找到符合条件的一组就可以输出了。咱们可以利用C++标准库的find函数来快速检查元素是否存在,你已经包含了<algorithm>头文件,正好能用。
下面是补全后的完整代码:
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { int arr[7], n = 7; for (int i = 0; i < n; i++) cin >> arr[i]; // 找到最大值,也就是A+B+C的总和 int sum_abc = arr[0]; for (int i = 0; i < n; i++) { if (sum_abc < arr[i]) sum_abc = arr[i]; } // 把数组转成vector,方便用find函数查找元素 vector<int> nums(arr, arr + n); // 遍历所有可能的A和B组合 for (int a : nums) { for (int b : nums) { int c = sum_abc - a - b; // 先检查C是否在数组里 if (find(nums.begin(), nums.end(), c) == nums.end()) continue; // 再检查两两之和是否都在数组里 int ab = a + b; int bc = b + c; int ca = c + a; if (find(nums.begin(), nums.end(), ab) != nums.end() && find(nums.begin(), nums.end(), bc) != nums.end() && find(nums.begin(), nums.end(), ca) != nums.end()) { // 找到解后输出,这里可以排序后输出避免重复结果 cout << a << " " << b << " " << c << endl; // 找到一组就退出,题目保证唯一解 return 0; } } } return 0; }
测试示例输入
输入:2 2 11 4 9 7 9
输出:2 2 7,完美匹配预期结果。
小优化提示
如果担心重复输出(比如交换A和B的位置得到相同解),可以在输出前把A、B、C排序,比如用sort函数把这三个数排好序再输出,这样不管遍历到哪组,输出的都是有序的结果。
内容的提问来源于stack exchange,提问作者smoothieshake
相关产品推荐
相关产品推荐

