确定数字

时间:2018-06-16 14:07:26

标签: algorithm

我正在尝试确定我正在进行的项目的算法。目标是获得所有数字组合序列,其中每个相邻数字的最大值是彼此的倍数。数字和序列长度是输入。

示例: 如果我输入序列长度3 最大数字5 ,我应该得到像这样的输出。

[ 1, 1, 1 ]
[ 1, 1, 2 ]
[ 1, 1, 3 ]
[ 1, 1, 4 ]
[ 1, 2, 4 ]
[ 1, 3, 3 ]
[ 1, 4, 4 ]
[ 2, 2, 2 ]
[ 2, 2, 4 ]
[ 2, 4, 4 ]
[ 3, 3, 3 ]
[ 4, 4, 4 ]

在所有序列中,每个数字是其先前邻居的倍数,而所有数字都小于5,这是作为输入给出的最大值。

2 个答案:

答案 0 :(得分:1)

您可以使用回溯来获取所需的所有序列。

回溯与DFS非常相似。你可以使用参数{你按顺序放入多少个数字}来制作递归函数,然后在按顺序放入适当的值(参数+ 1)之后调用递归函数。 在功能结束时,您必须清除顺序放置的数字。 如果序列已满,你也会杀死该函数。

答案 1 :(得分:0)

int seq[105];

void f(int idx) {
    if(idx == length) print();
    for(int i=1;1;i++) {
        if(i*seq[idx-1] > max_number) break;
        seq[idx]=i*seq[idx-1];
        f(idx+1);
        seq[idx]=0;
    }