版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ssllyf/article/details/82531572
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);
}