现在的位置: 首页 > 综合 > 正文

幂集源程序及详细分析过程

2013年10月03日 ⁄ 综合 ⁄ 共 1104字 ⁄ 字号 评论关闭

幂集的编写原理是利用最原始的二进制除法
a[0] a[1] a[2]
 a    b     c
0 0 0    {}    0        
0 0 1    {c}       a[2]   1
0 1 0    {b}    a[1]   2
0 1 1    {b c}     a[1] a[2]  3
1 0 0    {a}    a[0]   4
1 0 1    {a c}     a[0] a[2]  5
1 1 0    {a b}     a[0]  a[1]  6
1 1 1    {a b c}   a[0] a[1] a[2] 7
以下是思路 不能直接运行
x={0,1,2,3,4,5,6,7}

printf("{");
printf("{*},");//空集的情况
for(j=1;j<7;j++)//7为2的3次方 j从1开始是将空集的情况单独列出 这样是为了方便写循环语句
{y=j;
r=y%2;
m=y/2;
printf("{");
while(m)
{ma=3;//3为数组a的大小
if(r) printf("%d",a[ma-1]);
if(r&&(y/2)!=0) printf(",");//此句为格式控制的经典语句 认真体会
r=y%2;
m=y/2;
if(!m) printf(",");
ma--;
}
printf("}");
if(j<6) printf(",");//此句为格式控制的经典语句 认真体会
}
printf("}");
还要注意的地方就是输出格式的控制

具体代码见下:
#include"stdio.h"
#include<math.h>
#include<stdlib.h>
main()
{
 int i,j,max,m,x,r,n,ma;
 char c[10][20],ch;
 scanf("%d",&max);
 getchar();
 for(i=0;i<max;i++)
 {

 scanf("%s",c[i]);
/* while((ch=getchar())!='/40')
 {
  c[i][j]=ch;
  j++;
 }
 c[i][j]='/0';*/
}
 printf("{ {*},");
 n=pow(2,max);
for(j=1;j<n;j++)
{ ma=max;
m=j;
r=m%2;
printf("{");
while(m!=0)
{
 if(r) printf("%s ",c[ma-1]);
 if(r&&m&&((m/2)!=0)) printf(",");//或者写成if(r&&m&&((m/2)!=0)) printf(" ");这样的话元素之间的间隔就是空格
 m=m/2;
 r=m%2;
 ma--;
}
printf("}");
if (j<n-1) printf(",");
}
printf("}/n");
getch();
}

抱歉!评论已关闭.