如果我拿3个数字A B C,每个3位数(在100-999之间)并且执行:
A + B = C
如果使用的所有九个数字都是非零并且彼此不同(1-2-3-4-5-6-7-8-9)那么C的数字之和将始终为18。
ex : 152 + 487 = 639 -----> 6+3+9 = 18
357 + 462 = 819 = -----> 8+1+9 = 18
我需要我的程序来显示尊重这种关系的所有数字A,B和C的情况。我不确定如何解决这个问题。我在考虑使用外部for循环和内部for循环或使用rand函数,但我不确定如何为这些方法中的任何一个提供必要的条件。
答案 0 :(得分:1)
枚举全部9个! (= 362880)9位数的排列,然后对每个排列检查它是否符合要求。
1 2 3 4 5 6 7 8 9 one permutation
----- ----- -----
A B C chunked to these numbers (simple base10 math)
要生成排列,您可以使用next_permutation
。
答案 1 :(得分:0)
优化:
每个号码A只有一个唯一的号码B,A + B == 999。
对于每个数字A和B,当前A和下一个A与当前B之间的差异和下一个B总是大于8.
使用条件满足所需的数学条件。就这么简单。
使用for循环迭代所有3位数字对或使用async
并行化我在手机上,所以我无法编码;如果你需要更多,我会编辑它。
答案 2 :(得分:0)
我的方法是通过" 123456789"的所有排列。使用std::next_permutation
并检查前3位数加上后3位数减去最后3位数等于0.类似于:
int main()
{
std::string numbers = "123456789";
int a, b, c;
do
{
a = std::stoi(numbers.substr(0, 3));
b = std::stoi(numbers.substr(3, 3));
c = std::stoi(numbers.substr(6, 3));
if (a + b == c)
std::cout << a << " + " << b << " = " << c << "\n";
} while (std::next_permutation(numbers.begin(), numbers.end()));
}