7. 检查是否存在满足条件的数字组合

122 阅读1分钟

给定一个正整数数组检查数组中是否存在满足规则的数组组合

题目描述

给定一个正整数数组,检查数组中是否存在满足规则的数字组合

规则:A = B + 2C

输入描述

第一行输出数组的元素个数。

接下来一行输出所有数组元素,用空格隔开。

输出描述

如果存在满足要求的数,在同一行里依次输出规则里A/B/C的取值,用空格隔开。

如果不存在,输出0。

备注

  1. 数组长度在3-100之间。
  2. 数组成员为0-65535,数组成员可以重复,但每个成员只能在结果算式中使用一次。如:数组成员为[0, 0, 1, 5],0出现2次是允许的,但结果0 = 0 + 2 * 0是不允许的,因为算式中使用了3个0。
  3. 用例保证每组数字里最多只有一组符合要求的解。

用例

输入4
2 7 3 0
输出7 3 2
说明7 = 3 + 2 * 2
输入3
1 1 1
输出0
说明找不到满足条件的组合

C++源码

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

void func(const std::vector<int>& vec)
{
    for (int i = 0; i < vec.size(); i++)
    {
        for (int j = 0; j < vec.size(); j++)
        {
            if (j == i) continue;
            for (int k = 0; k < vec.size(); k++)
            {
                if (k == i || k == j) continue;
                if (vec[i] == vec[j] + vec[k] * 2)
                {
                    std::cout << vec[i] << " " << vec[j] << " " << vec[k] << std::endl;
                    return;
                }
            }
        }
    }
    std::cout << 0 << std::endl;
}

int main()
{
    int num;
    cin >> num;
    std::vector<int>vec(num);
    for (int i = 0; i < num; i++) {
        cin >> vec[i];
    }
    func(vec);
    return 0;
}