【深搜】01串

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
}

猜你喜欢

转载自blog.csdn.net/ssllyf/article/details/82531572