问题描述:列出一个集合的元素个数为k的所有子集。
思路:在字典顺序列出所有子集的基础上判断元素个数就可以了,比较简单。代码如下:
1 #include <stdio.h> 2 #define MAX 1000 3 4 int main() 5 { 6 int n=5; 7 int set[MAX]={1}; 8 int index=0; 9 int count=2; 10 int k=3; 11 while(set[0]!=n) 12 { 13 if(set[index]<n) 14 { 15 set[index+1]=set[index]+1; 16 index++; 17 } 18 else 19 { 20 index--; 21 set[index]++; 22 } 23 int a_index; 24 count++; 25 if(index==k-1) 26 { 27 printf("%d:{",count); 28 for(a_index=0;a_index<=index;a_index++) 29 printf("%d ",set[a_index]); 30 printf("}\n"); 31 } 32 } 33 return 0; 34 }
参考资料:《C语言名题精选百则技巧篇》
如果你觉得我的文章对你有帮助,请推荐一下,非常感谢!