子集和问题---来源于 计算机算法设计与分析(王晓东)

该博客介绍了如何解决子集和问题,提供了一个C语言实现的回溯法求解程序。用户输入集合元素和目标和,程序判断是否存在子集满足条件并打印结果。示例输入和输出展示了具体应用。
摘要由CSDN通过智能技术生成
#include #include int len; // 输入长度.int sum; // 和.int *data; // 数据.char *output; // 所求子集元素,与输入数据对应,'Y'为取.// 获取输入.void GetInput(){ int i; printf("输入集合个数: "); scanf("%d", &len); while(len <= 0){ printf("集合个数必须大于0: "); scanf("%d", &len); } data = new int[len]; output = new char[len]; for(i = 0; i < len; i++){ printf("输入第%d个数: ", i+1); scanf("%d", &data[i]); output[i] = 'N'; } printf("输入子集和: "); scanf("%d", &sum); while(sum <= 0){ printf("子集和必须大于0: "); scanf("%d", &len); }}// 回朔求解:有解返回非0值,无解返回0.int GetRes(){ int p = 0; // 指向当前值. int temp = 0; // 当前子集合和. while(p >= 0){ if('N' == output[p]){ // 选中当前项. output[p] = 'Y'; temp += data[p]; if(temp == sum){ return 1; } else if(temp > sum){ output[p] = 'N'; temp -= data[p]; } p++; } if(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值