跪求C语言数据结构程序设计有一集合中有 N 个元素,每个元素均为自然数.给定一个 total (假设每个 元素值均小于total),求满足条件的所有子集,子集中各元素之和应等于total最好描述下程序功
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/21 18:14:41
跪求C语言数据结构程序设计有一集合中有 N 个元素,每个元素均为自然数.给定一个 total (假设每个 元素值均小于total),求满足条件的所有子集,子集中各元素之和应等于total最好描述下程序功
跪求C语言数据结构程序设计
有一集合中有 N 个元素,每个元素均为自然数.给定一个 total (假设每个 元素值均小于total),求满足条件的所有子集,子集中各元素之和应等于total
最好描述下程序功能内容与重点难点,要做报告和答辩
跪求C语言数据结构程序设计有一集合中有 N 个元素,每个元素均为自然数.给定一个 total (假设每个 元素值均小于total),求满足条件的所有子集,子集中各元素之和应等于total最好描述下程序功
/*
*程序功能:有一集合中有 N 个元素,每个元素均为自然数.给定一个 total (假设每个 元素值均小于total),求满足条件的所有子集,子集中各元素之和应等于total
*/
#include <stdio.h>
#define N 5//定义集合中元素的个数
#define TOTAL 10//定义子集元素之和total
int main(int argc, char** argv)
{
int i = 0;//循环变量
int j = 0;//循环变量
int sum = 0;//定义各子集元素之和
long int loop = 1;//定义总循环数
int index = 0;//定义子集索引
int array[N] = {0};//定义集合array
int tmp[N] = {0};//定义子集tmp
for(i=0; i<N; i++)//循环输入集合中的元素
{
printf("Please input array[%d]:", i);
scanf("%d", &array[i]);
loop = loop * 2;//总循环数*2
}
for(i=0; i<loop; i++)//主循环,假设i=5,则其二进制表示为00101,当有一位为1时,该位位置就是集合中的索引,即对应着源集合中的array[2]和array[4]
{
sum = 0;
index = 0;
for(j=0; j<N; j++)//清空子集,准备存储下一个子集
{
tmp[j] = 0;
}
for(j=0; j<N; j++)
{
switch((i>>j) & 1)//循环右移,与1相与,取出第j位
{
case 1://取出i的第j位为1的索引
tmp[index] = array[N-j-1];//将i的第j位为1所代表的源集合中的元素放入子集中
sum = sum + array[N-j-1];//将i的第j位为1所代表的源集合中的元素累加
index ++;
break;
default:
break;
}
}
if(sum == TOTAL)//当子集元素之和等于TOTAL时,打印子集元素
{
for(j=0; j<N && tmp[j]!=0; j++)
{
printf(" +%d",tmp[j]);
}
printf("=%d\n",TOTAL);
}
}
return 0;
}