根据特定的约束条件生成3位数字

Generate 3 digits numbers according to specific constraints

本文关键字:3位 数字 约束条件      更新时间:2023-10-16

如果我取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函数,但我不确定如何给任何这些方法提供必要的条件。

列举全部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 .

我的方法是使用std::next_permutation遍历数"123456789"的所有排列,并检查前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()));
}
  1. 求所有位数和为18的3位数对
  2. 添加数字;如果总和不等于999则丢弃。
  3. 丢弃A1 == B2和A2 == B1

优化:

  • 每个数字A只能有一个唯一的数字B,使得A + B == 999

  • 对于每一个数字A和B,当前A和下一个A与当前B的差值且下一个B总是大于8


将if条件用于所需的数学条件。就这么简单。

使用for循环遍历所有3位数字对,或使用async

并行。

我在手机上,所以我不能编码;如果你需要更多的话,我来编辑一下