Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176949
  • 博文数量: 43
  • 博客积分: 611
  • 博客等级: 中士
  • 技术积分: 1053
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-02 13:37
文章存档

2015年(3)

2013年(23)

2012年(17)

我的朋友

分类: C/C++

2013-01-17 12:11:46

         问题描述:写一个程序,用字典顺序把一个集合的所有子集找出来。

         此题的思路来自《C语言名题精选百则技巧篇》:字典顺序,也就是字符串比较时的顺序规则。可以采取这样的思路(以下是我根据书上的思路进行归纳再加上我自己的理解得来的步骤):

         先定义n是集合的个数并且集合是已经从小到大排好顺序的{1,2,3....n}的集合。集合从{1}开始(此时下标index=0),

         1.当state[i]

         2.当state[index]==n时,就不能向右边进行扩展了,此时就需要向左边处理了。此时的集合是{1,2,3,....,n-2,n-1,n},那么,要找比这个集合刚好大一点的,就是{1,2,3,....n-2,n},所以就可以归纳出规则为:将index减1并且将state[index]加1。

         3.如果state[0]==n,那么循环就结束,反之则重复第1,2步,直到state[0]==n。

         代码如下:

#include 
 #define MAX  1000
 
 int main()
 {
     int n=3;
     int set[MAX]={1};
     int index=0;
     int count=2;
     printf("1:{}\n2:{1}\n");
     while(set[0]!=n)
     {
         if(set[index]


         参考资料:《C语言名题精选百则技巧篇》

       如果你觉得我的文章对你有帮助,请赞一下,非常感谢!

阅读(1373) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~