数组中任选几个数相加,使其等于一个给定的值.请给出c++实现或者算法描述.比如:1、1、1、1、2、4、2这几个数,是否可以选出若干数,使其相加等于6..给出通俗易懂的算法描述最好不过了.

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 00:04:38

数组中任选几个数相加,使其等于一个给定的值.请给出c++实现或者算法描述.比如:1、1、1、1、2、4、2这几个数,是否可以选出若干数,使其相加等于6..给出通俗易懂的算法描述最好不过了.
数组中任选几个数相加,使其等于一个给定的值.请给出c++实现或者算法描述.
比如:1、1、1、1、2、4、2这几个数,是否可以选出若干数,使其相加等于6..给出通俗易懂的算法描述最好不过了.

数组中任选几个数相加,使其等于一个给定的值.请给出c++实现或者算法描述.比如:1、1、1、1、2、4、2这几个数,是否可以选出若干数,使其相加等于6..给出通俗易懂的算法描述最好不过了.
这个问题又称为“子集和问题”(也就是给定一个整数集合和一个定值,从一个集合中选取一个子集,使得子集中所有数的和等于给定的值,具体的可以百度,google 子集和问题),这是一个NP完全问题,不存在多项式时间的解,所以没有好的算法.
算法可以网上搜一下.
下面是我替你搜的的一个(回溯法:遇到合适的就取,取到后面的时候满足不了,就后退,重新取下一个满足的):
输入:数组长度 定值
数组中的数
例如:5 10
4 5 2 6 2
输出 :4 6
#include
using namespace std;
#include
int len;
int sum;
int data[100000]; // 数据.
char output[100000]; // 所求子集元素,与输入数据对应,'Y'为取.‘N’为不取
void GetInput(){
int i;
cin >> len >> sum ;
for(i = 0; i < len; i++){
scanf("%d",&data[i]);
output[i] = 'N';
}
}
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(p >= len){
while('Y' == output[p-1]){
p--;
output[p] = 'N';
temp -= data[p];
if(p < 1){
return 0;
}
}
while('N' == output[p-1]){
p--;
if(p < 1){
return 0;
}
}
output[p-1] = 'N';
temp -= data[p-1];
}
}
return 0;
}
void PrintRes(){
int i ;
for(i = 0; i < len; i++)
{
if('Y' == output[i])
{
// best[k]=data[i];
cout

数组中任选几个数相加,使其等于一个给定的值.请给出c++实现或者算法描述.比如:1、1、1、1、2、4、2这几个数,是否可以选出若干数,使其相加等于6..给出通俗易懂的算法描述最好不过了. 数组元素插入如何在一个排好的数组中插入几个数使之成为另一个数组输出 C语言,编辑一个函数fun统计给定数组中奇数和偶数的个数 编程之美一道思考题的延伸,C语言代码或算法均可一个数组,arr[n]={1……n},给定一个数m,在数组中找一个子集合,使其和恰好等于这个数m,求,这样的子集合一共有多少例如:n=7 数组为{1,2,3,4,5,6, 1-33任选6个数,且这6个数相加等于93,象这样的6个数一共有几组? 如何实现在Excel表的一组数据中找出任意几个数相加等于指定数据的?或者等于另外一个表中的任意几个数字相加 怎样用VB产生一个不定个数的随机数组?当数组中前几个数的和大于某一个数时,令text1.text等于前几个数的和. 在java中怎么表示一个数组等于另外两个数组相加之和?三个数组位数都相等 一个算法题目 给定一个数组其每个元素都是正数,和一个给定值M,求所有连续的子数组其和可以整除M给定一个数组其每个元素都是正数,和一个给定值M,求所有连续的子数组其和可以整除M请给 某密码由0到9这十个数中任选3个数组成,则任拨一个三数组,能打开锁的概率是 excel的数值排列组合,怎么从一堆数中筛选出几个数相加等于一个已知的数例如:12541、56547、24587、26589、54896、26874、23657、5874,怎么知道哪几个数相加等于106072、89295 在Excel中,给定几个数字,求出哪些相加能最接近或等于某个数.5.9123.9924.0224.6124.622525.1325.7625.7925.992626.0526.0826.2326.3126.3226.526.5628.2328.2928.4831.43哪几个数相加能最接近328.798我这个excel,在加载宏里 该怎样理解.给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的 某密码由0~9这十个数字中,任选3个数组成,则任拨一个三数组,能打开锁的概率是多少 Java 从100个数字里 抽取20个 有重复 相加等于21.5假如给定一个100位的数组 内容大致为{1.5,11.6,3.7 ,11.6 ……}(次数组内容固定不变)数组内的数字有重复,从中选择20个(可以重复选) 找出 1到13中任意两个数相加,等于几的概率最大 1到33中6个数为一组相加等于68的数组都是哪些顺序不重要有没有 公式什么的呀 把数组1和2对应相加,就是数组1 2的第一个数相加,第二个数再相加,相加的结果显示在第三个数组