根据特定的约束条件生成3位数字
Generate 3 digits numbers according to specific constraints
如果我取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()));
}
- 求所有位数和为18的3位数对
- 添加数字;如果总和不等于999则丢弃。
- 丢弃A1 == B2和A2 == B1
优化:
-
每个数字A只能有一个唯一的数字B,使得A + B == 999
-
对于每一个数字A和B,当前A和下一个A与当前B的差值且下一个B总是大于8
将if条件用于所需的数学条件。就这么简单。
使用for循环遍历所有3位数字对,或使用async
并行。我在手机上,所以我不能编码;如果你需要更多的话,我来编辑一下
相关文章:
- 输出错误,问题是找到总和5000位数字cpp
- 顺时针迭代旋转 3 位数字
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 使用 cin 时接受小数点后的 2 位数字
- 您可以使用 setfill() 来设置 fill 2 位数字吗?
- 斐波那契数列部分和的最后一位数字
- 我需要找到 N 位数字的总和
- 如何在不使用 C++ 中的数组或函数的情况下查找 N 位数字的所有排列
- 如何在C ++中替换整数的前两位数字?
- 将最多 50 位数字的 2 个数字相乘
- C++ 中 11 位数字的数字的乘积
- 使用 AVX2 指令左移 128 位数字
- 如何对两个 4 位数字进行乘法,将它们视为 C++ 中的多项式
- 将大数字(10-12 位数字)存储在无序映射中<字符串,整数>
- 随机生成的输出中有多少位数字 1、2、3
- 列出所有 N 位数字,并带有 [字符串] 数字
- 如何生成九位数字,其中每个数字都与其他数字不同
- 以8位数字形式输入日期并以英文形式显示
- 如何正确取消设置64位数字中的位?
- 如何找到由公式计算的非常大的数字的最后一位数字?