每日一算法:产生可能的集合(二)

举报
悦来客栈的老板 发表于 2020/12/29 00:04:00 2020/12/29
【摘要】 产生可能的集合 说明 给定一组数字或符号,产生所有可能的集合(包括空集合),例如给定1 2 3, 则可能的集合为:{}、{1}、{1,2}、{1,2,3}、{1,3}、{2}、{2,3}、{3}。  如果要产生字典顺序,例如若有4个元素,则: {} => {1} => {1,2} => {1,2,3} => {1,2,3,4...




















接下来再加入后续元素4,也就是{1 3 4},由于又遇到元素4,所以下一个集合是{1 3+1},也就是{1 4}。



  
  1. #include <stdio.h>
  2. #define MAXSIZE 20
  3. int main()
  4. {
  5. int set[MAXSIZE];
  6. int i,n,position = 0;
  7. printf("输入集合个数:");
  8. scanf("%d",&n);
  9. printf("{}");
  10. set[position] = 1;
  11. while (1)
  12. {
  13. printf("\n{%d",set[0]);//打印第一个元素
  14. for (i=1; i<= position; i++)
  15. {//打印各个位置上的元素
  16. printf(",%d",set[i]);
  17. }
  18. printf("}");
  19. if (set[position] < n)
  20. {//如果当前不是最大的元素
  21. set[position+1] = set[position] + 1;//下一个位置的元素值比当前大1
  22. position++;//继续后移
  23. }
  24. else if (position != 0)
  25. {//如果是最大元素且当前位置不是0,那么退回到前面一个元素,并将其值加1
  26. position--;
  27. set[position]++;
  28. }
  29. else
  30. {//否则跳出循环
  31. break;
  32. }
  33. }
  34. printf("\n");
  35. return 0;
  36. }


文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/14101035

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。