求高手帮忙:已知一个总和,怎么从一串数字中找出哪几个数相加等于这个总和?

数字有3003000351126281555494561083512194636441520259030113904228913711915189912902707115... 数字有300 3000 3511 2628 1555 4945 6108 3512 1946 3644 1520 2590 3011 3904 2289 1371 1915 1899 1290 2707 1150 1202 1716 7137 370 996 总和为11206 求详细过程 还有很多类似的要计算 展开
百度网友72165e1
推荐于2016-12-01 · TA获得超过2168个赞
知道大有可为答主
回答量:1369
采纳率:100%
帮助的人:343万
展开全部
交给计算机吧,使用计算机程序来解决这类问题是一个好方法,毕竟现在计算机已经非常普及了。
下面使用C语言作一段处理代码:
#include<stdio.h>
#define DIGITMAX 26
#define Total 11206
int *start;
void getsum(int sum,int row,int *p)
{
int i,k,temp,*ptm;
if(sum>Total)return;
for(i=row;i<DIGITMAX;i++)
{
temp=sum+*(start+i);
if(temp==Total)
{
*p=*(start+i);
*(p+1)=-1;
printf("\n-----------\n");
for(ptm=start,k=0;k<20;k++,ptm++){
if(*ptm==-1)break;
printf("%d ",*ptm);
}
}
if(temp>Total)return;
*p=*(start+i);
getsum(temp,i+1,p+1);
}
}
main()
{
int num[26]={300,3000,3511,2628,1555,4945,6108,3512,1946,3644,1520,2590,3011,
3904,2289,1371,1915,1899,1290,2707,1150,1202,1716,7137,370, 996};
int *p,sum;
start=num,p=start,sum=0;
printf("1.=%d",*start);
getsum(sum,0,p);
return 0;

}这样的组合有不少,我试算了一下,其中有一组:996,1650,1915,2707,1150,1202,1716
更多追问追答
追问

追答
上面代码用的是C语言,你可以从网上下载Win-tc运行上面的程序。这个程序我已经在WIN-TC上通过了编译。
花花浪客
2013-04-24 · TA获得超过2068个赞
知道小有建树答主
回答量:792
采纳率:100%
帮助的人:644万
展开全部
这个问题的实质是一个给出一个集合,求这个集合的所有组合的问题。(所有组合都出来了,就可以看哪个组合的和与期望值相同就行了。
可以参考下这个文章:
http://www.th7.cn/Program/cp/201301/120259.shtml
更多追问追答
追问
文章看完了,还是没懂,我是小白
追答
就是可以考虑使用递归实现,下面是使用C的一个实现,运行后屏幕上输出的数字就是结果,对于这个问题来说,就是3511 2628 1555 3512这几个数字。
如果要做其他类似的计算,修改AllNumber和expected 的赋值就可以做其他不同的计算,
#include

int AllSum(int CurArray[], int len, int expected)
{
if (len >= 1)
{
if (CurArray[len - 1] == expected)
{
printf("%d ", CurArray[len - 1]);
return 1;
}
else
{
int result = AllSum(CurArray, len - 1, expected);
if (result)
return result;
else
{
if (CurArray[len - 1] < expected)
{
result = AllSum(CurArray, len - 1, expected - CurArray[len - 1]);
if (result)
{
printf("%d ", CurArray[len - 1]);
return 1;
}
}
return 0;
}
}
}
else
{
return 0;
}
}

void main()
{
int AllNumber[] = {300,3000,3511,2628,1555,4945,6108,3512,1946,3644,1520,2590,3011,3904,2289,1371,1915,1899,1290,2707,1150,1202,1716,7137,370,996};
int len = sizeof(AllNumber)/sizeof(int);
int expected = 11206;
AllSum(AllNumber, len, expected);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
不畏互J
2013-04-24 · TA获得超过977个赞
知道小有建树答主
回答量:281
采纳率:0%
帮助的人:176万
展开全部
正好26个数字,你编个程序(VB之类的就行),把这26个数字赋值给a~z的26个字母。然后做个循环,任意两项、3项、4项~26项相加等于11206的就保存,然后让计算机去跑吧。
追问
可是不会编啊,麻烦你编一个好嘛,  或者教我下怎么用EXCEL计算
追答
http://zhidao.baidu.com/question/354110360.html

经测试此过程能够达成你的目标
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0c11c09
2018-03-07
知道答主
回答量:1
采纳率:0%
帮助的人:811
展开全部
用1029.96,349.91,430,650,660.05,540.09,1750,1135.03,7.81,1600,787.07,600,500,1399.93,640,7.19,123.74,169,734.96,495,29.82,690.07,684.99,625.01,779.98,710.05,560,29.75,610.06,18.74,19.21,19.05,22.17数字中找出哪几个数相加等于1946.34
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式