c语言怎么将n位由0和1的所有排列组合方式赋给一个数组

如题如题

#include<stdio.h>

#define N 3

void main()

{ int i,j,k,n,A[N];

    for ( i=0,n=0;i<N;i++ ) { n<<=1; n|=1; } n++;

    for ( i=0;i<n;i++ )

    { for ( j=N-1,k=i;j>=0;j-- ) { A[j]=k&1; k>>=1; }

      for ( j=0;j<N;j++ ) printf("%d ",A[j]); printf("\n");

    }

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-06
这个很简单啊,0和1就是2进制啊,所有组合就是整数0到(2^n)-1中的所有整数,你将这些数以2进制存进去就行了啊追问

额,我的意思是 比如第一次取数组时A[3]={0,0,0},第二次变成A[3]={0,0,1} 第三次变成A[3]={0,1,1}....等等依次类推,所有可能的排列方式

追答

唉,你怎么还没有想明白了,
000不就是0
001不就是1
010不就是2
011不就是3
100不就是4
101不就是5
110不就是6
111不就是7
你把每一位依次输出不久行了啊

第2个回答  2014-04-06
#include<stdio.h>
#include<math.h>
#define Max_Number 100
int main()
{
int n,i,k,temp,m1,m2;
int A[Max_Number];
for(i=0;i<100;i++)
A[i]=0;
scanf("%d",&n);
m2=pow(2,n);
for(i=0;i<m2;i++)
{
m1=pow(2,n-1);
temp=i;
for(k=0;k<n;k++)
{
A[k]=temp/m1;
temp=temp%m1;
m1=m1/2;
}
for(k=0;k<n;k++)
printf("%d",A[k]);
printf("\n");
}
}
代码如上。

相似回答