全部为零的序列,其中一个序列彼此不相邻

时间:2018-01-12 21:27:36

标签: algorithm binary combinations procedure

我必须编写一个程序,对于每个给定的n> 0,写下每个长度为0-1的单个0-1序列,其中1不能坐在任何其他1的旁边。

例如:对于n = 3,输出为:

000,001,010,100,101

我考虑了递归,但在这种情况下无法使用它。

任何提示都将受到高度赞赏。

3 个答案:

答案 0 :(得分:2)

只需排除连续1的结果即可。 以下是示例java代码:

public class Test0 {
    public static void main (String [] args) {
        int n = 4;
        for(int i = 0; i < Math.pow(2,n); i++) {

            if ( (i & (i << 1)) != 0 )
                continue;
            System.out.println( i/8 % 2 + "" + i/4 % 2 + "" + i/2 % 2 + "" + i % 2);
        }
    }
}

如果有两个连续1,表达式i & (i << 1))将导致非零,否则为0.

答案 1 :(得分:2)

既然你要求提示并提到了递归,这里有一个递归提示:

{{1}}

答案 2 :(得分:1)

这是一个Python递归解决方案:

def rec(n,a=''):
    if len(a)==n:
        print a
        return
    rec(n,a+'0')
    if len(a)==0 or a[-1]!='1':
        rec(n,a+'1')

rec(3)

打印:

000
001
010
100
101

实际上,Zeckendorf's theorem证实了这个序列中的第n个项等于数字n的Zeckendorf表示(用Fibonacci项表示数字)。这解释了为什么选择的数量由斐波纳契数给出。