01串
Description
用n个0和n个1排成一个2n位的二进制数,要求从最高位起到任意一位,0的个数不能少于1的个数。编程求出所有符合条件的2n位二进制数。
如n=3时,符合条件的共有5个:
000111
001011
001101
010011
010101
你的任务是输入一个数N(N<=15)输出符合条件的2N位二进数的个数。
Sample Input
3
Sample Output
5
符合条件的数是
000111
001011
001101
010011
010101
思路:
用深搜枚举填法,符合条件时记录
#include<cstdio>
#include<iostream>
using namespace std;
int n,n1,n0,z;
void js(int x)
{if (x>n*2)//判断是否填完了{z++;//记录return;}if (n0<n)//判断0还可不可以填{n0++;//零的个数加一js(x+1);n0--;//回溯}if (n0>n1)//判断0的个数是否大于1的个数{n1++;//同上js(x+1);n1--;}
}int main()
{scanf("%d",&n);js(1);printf("%d",z);
}