gpt4 book ai didi

c - 3 位数字组合 0-9 算法如何工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:12 25 4
gpt4 key购买 nike

#include<stdio.h>   
int main()
{
int i, j, k;
for (i = 0; i <= 7; i++)
{
for (j = i+1; j <= 8; j++)
{
for (k = j+1; k <= 9; k++)
{
printf("%d%d%d\n", i, j, k);
}
}
}
}

我有这个算法。它生成所有 120 个唯一数字。也许我很笨,但我不明白一件简单的事情。如果我从两个内部循环变量初始化中删除 +1,我将收到 720 个独特的组合。有了这个 +1,我收到了 120,这不会重复。因此它会清除数字,因此不会有像 517 和 715 这样的数字。有人可以解释如何向内部循环添加 +1 来删除所有不同的安排并只留下一个吗?因为必须至少有 6 组唯一的 120 个数字。

最佳答案

当你打印第一组数字时,你有:

i j k --> i i+1 j+1 --> i i+1 i+2 --> 0 1 2,

并且在第一次完成 k 之后-循环你有:

i j k --> 0 1 9.

然后 j -循环继续,有:

i j k --> 0 2 3.

如果 j 的初始值- 和 k - 循环没有递增,那么你会:

i j k --> i i i --> 0 0 0
....
i j k --> 0 0 9
i j k --> 0 1 1,

并且这些集合将包含重复的数字。

该算法获得所有三个唯一数字的集合,因为它首先找到所有以 0 1 开头的集合,然后是所有以 0 2 开头的集合, ..., 然后是所有以 1 2 开头的集合, ..., 最后是所有以 7 8 开头的集合,其中只有一个:7 8 9 .

i 的限制, j , 和 k在这方面发挥作用。最后一组将是 7 8 9 , 所以 i限制为最大值 7,j限制为 8,并且 k限制为 9。当 i - 循环首先继续:

i j k --> 0 8 9
i j k --> 1 2 3

不再有以0 8 开头的唯一集, 并且没有以 0 9 开头的唯一集(我们已经有了 0 1 9 , ..., 0 8 9 ,证明了 j <= 8 的限制),所以现在我们有了所有以 0 开头的唯一集合, 并开始查找所有以 1 开头的唯一集.第一个是:

i j k --> i i+1 i+2 --> 1 2 3.

系统计数

我认为将此处发生的事情视为“删除重复项”或某种排序是错误的。这是关于系统计数。我们想计算唯一的三位数字集的数量。套1 2 3 , 3 2 1 , 和 1 3 2是等价的,因为它们包含相同的成员,所以我们不想列出所有三个,而只列出其中一个。这些数字集不包含重复项,即 1 1 2在这种情况下不是集合。我们可以自由选择一个方便的标准来选择我们要计算的集合,我们选择以数字升序计算(有序的)集合。请注意,我们不对这些进行排序,我们只是对它们进行计数。

所采用的策略是将组合列为三位数,从小到大排列。自然地,列表以最小的可能性开始,0 1 2 .观察以数字 d 开头的最小“数字”是d d+1 d+2 ,并且最大的此类“数字”是d 8 9 .所有这些“数字”中最大的是 7 8 9 .这些观察结果为我们提供了循环条件的限制。

将这三位数字想象成一个计数器。我们可以通过系统地遍历允许的组合来列出所有升序的三位数“数字”。 +1的原因是我们选择了按升序计算数字的“数字”。我们也可以选择按降序计算数字的“数字”。

想一想,这对您来说可能是一个很好的练习:修改您的算法以按降序显示数字。这可能有助于巩固您的理解。

关于c - 3 位数字组合 0-9 算法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40423844/

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