[英]Print number of ways for non-consecutive one's
給定正整數N,請打印1到2 ^ N之間的所有整數,以使其二進制表示形式中沒有連續的1。
我有以下代碼,但有時會打印重復的代碼。 是否可以不重復打印?
#include <stdio.h>
int a[100];
void foo(int i, int size)
{
if (i >= size) {
int i;
for (i=0;i<size;i++)
printf("%d\n", a[i]);
printf("----\n");
return;
}
if (a[i-1] == 1 || a[i-1] == 0)
a[i] = 0;
foo(i+1, size);
if (a[i-1] == 0)
a[i] = 1;
foo(i+1, size);
}
int main(void) {
int i = 0;
int size = 5;
a[i] = 1;
foo(1, size);
return 0;
}
我有這個http://ideone.com/cT4Hco python程序,該程序使用哈希圖來打印元素,但我認為我們也可以在沒有哈希圖的情況下執行此操作。
幾個注意事項:
a
中處於[0, n-1]
范圍內 a[0]
初始化為1
因為a[0] = 0
也是有效的情況。 if (a[i-1] == 1 || a[i-1] == 0)
是多余的 碼:
#include <stdio.h>
int a[100];
void foo(int i, int size)
{
if (i >= size) {
int i;
for (i=0;i<size;i++)
printf("%d ", a[i]);
printf("\n----\n");
return;
}
a[i] = 0;
foo(i+1, size);
if ( i == 0 || a[i-1] == 0) {
a[i] = 1;
foo(i+1, size);
}
}
int main(void) {
int i = 0;
int size = 5;
foo(0, size);
return 0;
}
您可能還需要在打印期間過濾解決方案0 0 0 ... 0
,因為只需要1
到2^n
的數字即可。 如果包含2^n
則還應該打印它。 回溯考慮數字0, ...., 2^n-1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.