我正在尝试确定我正在进行的项目的算法。目标是获得所有数字组合序列,其中每个相邻数字的最大值是彼此的倍数。数字和序列长度是输入。
示例: 如果我输入序列长度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,这是作为输入给出的最大值。
答案 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;
}