You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:基于已实现的最值查找,完成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:02:56