C语言取字符的第n二进制,c语言如何生成长度为n的二进制字符串的全排列

匿名用户

1级

2018-11-07 回答

#include 

#include 

#include 

void add(char* p, int i)  //参数:p为数组,i为正在检测的位

{

if(p[i]=='0')         //当该位为0, 则变为1, 退出add函数

{

p[i]='1';

return;

}

else if(p[i]=='1')   //如果该位为1,则变为0, 再检测前一位, 如果前一位还为1, 则检测再前一位

{                    //直到前一位为0,才退出add函数

p[i]='0';

add(p,--i);

}

}

int main()

{

char* p=NULL;

int n;

while(1)     //循环输入不同的位数

{

printf("\n\nplease input:");

fflush(stdin);  //清空输入缓冲

scanf("%d",&n);

if(n<1)   //输入小于1时退出程序

{

break;

}

if(p!=NULL)  //如果p数组存在,则释放它, 重新构建数组

{

free(p);

}

p=(char*)malloc(sizeof(char)*(n+1));  // 重新构建数组

memset(p,'0',n);                      //每位先设置为0

p[n]='\0';

printf("\n%s",p);                     //输出全0情况

int i=n-1;                            //末尾位

while(1)

{

int flag=1;

int j;

for(j=0;j

{

if(p[j]=='0')

{

flag=0;

break;

}

}

if(flag==1)

{

break;

}

else                //如果不是每一位全为1,则在最后位上加1(调用add函数)

{

add(p,n-1);

printf("\n%s",p);

}

}

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值