格雷码问题

#include<stdio.h>
#include<string.h>
char a[500][50],b[500][50];
void Gray(int n){
    char str1[20]="0";
 char str2[20]="1";
 int i,j,p;
 if(n==1){
     strcpy(a[0],str1);
  strcpy(a[1],str2);
  }else{
      Gray(n-1);
   i=2;
   for(j=0;j<n-2;j++)
   i=i*2;
   for(p=0;p<i;p++){
       if(p%2==0){
        strcpy(b[p*2],a[p]);
     strcat(b[p*2],str1);
     strcpy(b[p*2+1],a[p]);
     strcat(b[p*2+1],str2);
     }else{
         strcpy(b[p*2],a[p]);
      strcat(b[p*2],str2);
      strcpy(b[p*2+1],a[p]);
      strcat(b[p*2+1],str1);
      }
     }
     for(p=0;p<i*2;p++)
     strcpy(a[p],b[p]);
     }
    }
int main(){
    int i=2,j,t[10],m,k,p;
 scanf("%d",&m);
 for(j=0;j<m;j++)
 scanf("%d",&t[j]);
 for(j=0;j<m;j++){
     printf("\n");
  for(k=0;k<t[j]-1;k++)
  i=i*2;
  Gray(t[j]);
  for(k=0;k<i;k++){
      for(p=0;p<t[j];p++)
   printf("%c ",a[k][p]);
   printf("\n");
  }
 }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_54152049

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值