gpt4 book ai didi

c - 2 位数字的总和以及每个总和的所有组合

转载 作者:行者123 更新时间:2023-11-30 15:53:29 24 4
gpt4 key购买 nike

使用数字 1 到 9,不重复相同的数字,我制作了这个总和表,其中包括将两个数字相加以及每个总和的所有可能组合。我正在尝试用 C 语言编写一个程序,通过将 2 位数字及其每个组合相加来查找所有总和,然后打印出此图表。我试图使用 for 循环来编写这个程序,但遇到了困难。我可以打印出第一个初始总和,但现在让我难住的是组合。我不知道我是否走在正确的轨道上。任何建议和帮助将不胜感激。我的图表、到目前为止编写的代码以及当前代码的打印输出如下。

这就是我希望我的程序执行的操作:

此图表列出了所有由 2 位数字组成的总和以及构成每个总和的所有可能组合。

    2 Digit Sums
Sum Combinations
3 1+2
4 1+3
5 1+4, 2+3
6 1+5, 2+4
7 1+6, 2+5, 3+4
8 1+7, 2+6, 3+5
9 1+8, 2+7, 3+6, 4+5
10 1+9, 2+8, 3+7, 4+6
11 2+9, 3+8, 4+7, 5+6
12 3+9, 4+8, 5+7
13 4+9, 5+8, 6+7
14 5+9, 6+8
15 6+9, 7+8
16 7+9
17 8+9

这是我能够成功编写的代码:

/* Thus program uses the digits 1 - 9 to find all possible sums composed of two
digits, non repeating, and all possible combinations of digits to obain the sums. */
#include<stdio.h>
int main(void)
{
int S, A, B;
A = 1;
B = A + 1;
S = A + B;
printf("\t\t2 Digit Sums\n\n");
printf("Sum\tCombinations\n");
for(B; B <= 8; ++B)
{
S = A + B;
printf("%d\t%d + %d\n", S, A, B);
}
for(A; (A < B && A !=B); ++A)
{
S = A + B;
printf("%d\t%d + %d\n", S, A, B);
}
return(0);
}

这是我的代码的输出:

                2 Digit Sums
Sum Combinations
3 1 + 2
4 1 + 3
5 1 + 4
6 1 + 5
7 1 + 6
8 1 + 7
9 1 + 8
10 1 + 9
11 2 + 9
12 3 + 9
13 4 + 9
14 5 + 9
15 6 + 9
16 7 + 9
17 8 + 9
Press any key to continue...

最佳答案

如果问题的范围像这样有限,你可以通过暴力破解来解决——只需全部尝试一下即可。只有 17 * 9 * 9 个变体需要检查,这实际上并不是很多。

具有三个循环(伪代码):

for each value of possible_sum (2-17)

print possible_sum

for each value of addend1 (1-9)

for each value of addend2 (1-9)

if ( addend1 + addend2 = possible_sum )
then

print addend1 and addend2

end if

end for addend2

end for addend1

end for possible_sum

留给你的一个问题是找出如何消除对称解(4+5 和 5+4),如果你查看解中的模式,这很容易(注意第一个加数与第二个加数的关系) )。如果你仔细考虑的话,有很多方法可以加速甚至是这种蛮力方法。

对于更大的数据集(“所有三位数加数......”),需要更好的算法。

关于c - 2 位数字的总和以及每个总和的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13610304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com