每日一算法:产生可能的集合(二)
【摘要】 产生可能的集合
说明
给定一组数字或符号,产生所有可能的集合(包括空集合),例如给定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}。
-
#include <stdio.h>
-
-
#define MAXSIZE 20
-
-
int main()
-
{
-
int set[MAXSIZE];
-
int i,n,position = 0;
-
printf("输入集合个数:");
-
scanf("%d",&n);
-
printf("{}");
-
set[position] = 1;
-
while (1)
-
{
-
printf("\n{%d",set[0]);//打印第一个元素
-
for (i=1; i<= position; i++)
-
{//打印各个位置上的元素
-
printf(",%d",set[i]);
-
}
-
printf("}");
-
if (set[position] < n)
-
{//如果当前不是最大的元素
-
set[position+1] = set[position] + 1;//下一个位置的元素值比当前大1
-
position++;//继续后移
-
}
-
else if (position != 0)
-
{//如果是最大元素且当前位置不是0,那么退回到前面一个元素,并将其值加1
-
position--;
-
set[position]++;
-
}
-
else
-
{//否则跳出循环
-
break;
-
}
-
}
-
printf("\n");
-
return 0;
-
}
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/14101035
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)