200分求C语言算法,请高手告诉思路

来源:百度知道 编辑:UC知道 时间:2024/06/03 01:04:21
设一个集合有4个元素,a[0],a[1],a[2],a[3]
我要提出所有可能的组合.就是
a[0],
a[1],
a[2],
a[3], //1个的有4种
a[0],a[1],
a[0],a[2],
a[0],a[3],
a[1],a[2],
a[1],a[3]
a[2],a[3], //2个的有6种
a[0],a[1],a[2]
a[0],a[1],a[3]
a[0],a[2],a[3]
a[1],a[2],a[3] //3个的有4种,
a[0],a[1],a[2],a[4] //4个的有1种

求一种算法可以做到这点,将任意(不是4个!是任意个)个元素组成的集合,按这样的方式提取出来.请高手指点!
在线等.
给程序更好.我邮箱是fireuc@126.com,拿过来吧.请注明您的ID,我好把分给你.
2楼,我的目的是得到所有可能组合,而且最好是按照我写的那种方式排列,这是我计算机辅助逻辑综合课程的一个算法作业,其他都编号了,就是中间这一部分想不出好办法.

// VC6.0 编译通过

#include <stdio.h>

int count;
bool *select;

// 输出每条结果
void ShowResult()
{
for (int i=0; i<count; i++)
if (select[i])
printf(" a[%d] ", i);

printf("\n");
}

// 递归求解
void FindResult(int minsel, bool *ary, int arycount)
{
if (minsel > arycount)
return;

if (minsel == 0)
{
ShowResult();
return;
}

if (minsel == arycount)
{
int i;
for (i=0; i<minsel; i++)
ary[i] = true;

ShowResult();

for (i=0; i<minsel; i++)
ary[i] = false;

return;
}

ary[0] = true;
FindResult(minsel-1, &ary[1], arycount-1);
ary[0] = false;
FindResult(minsel, &ary[1], arycount-1);
}

// 主函数
int main()
{
int i;

printf("请输入数字的个数: ");
scan