c程序求子集方法1
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
有集合为a,b,c,d,e,f,求真子集 #include int N[6]; int sum=6; int min,max,count=0; //计算长度为len的值得范围 void Range(int len) { long Data=0; int m=0; int i,j; for(i=7-len;i<=6;i++) { Data=Data*10+i; } for(j=1;j<=len;j++) { m=m*10+j; } min=m; max=Data; } //存入数组 void DataGroup(long d,int len) { int i; for(i=len-1;i>=0;i--) { N[i]=d%10-1; d=d/10; } } //判断是不是子集 int IsSub(int D[],int len) { int i; if(len==1) return 1; if(N[0]<0) return 0; for(i=1;i { if(N[i]<0 || N[1]==0 || N[i]>5) return 0; if(N[i-1]>=N[i] ) return 0; } return 1; }
////////////////////////// void D() { int i; for(i=0;i<6;i++) printf("%d ",N[i]); printf("\n"); }
//打印子集
void Dispaly(char C[],int len) { int i; printf("{"); for(i=0;i { if(i==(len-1)) { printf("%c",C[N[i]]); } else { printf("%c,",C[N[i]]); } } printf("}\n"); }
//循环
void Rec(char C[],int len) { long i; for(i=min;i<=max;i++)
{ DataGroup(i,len); // if(IsSub(N,len)) { // D(); Dispaly(C,len); count++; } } }
int main() { char A[6]={'a','b','c','d','e','f'}; int i=2; for(i=1;i<=6;i++) { Range(i); Rec(A,i); } printf("%d\n",count); printf("%d %ld\n",min,max); return 0; }
本文来源:https://www.wddqw.com/doc/53f831d907a1b0717fd5360cba1aa81144318f6d.html