从N个给定数中选出几个,其相加等于一个固定值
如题。如:624、68452、63541、68741、342、150、6841选出几个相加等于64507,显示出所选数字。想法是用VB或是VBS写一小段代码。因为类似工作...
如题。如:624、68452、63541、68741、342、150、6841选出几个相加等于64507,显示出所选数字。想法是用VB或是VBS写一小段代码。因为类似工作要做很多,自己凑很麻烦!
展开
1个回答
2013-09-03
展开全部
vb,vbs不太懂,能不能用c来写的。
说下思路吧。
用回溯来做。
把所有的数据存到一个数组里面,比如a[],共有n个。
自定义一个函数。void solve(int data,int k,int b[],int m)
data,表示当前的值,k表示所到的数组的下标。
b[]来存最后的选 出来的数,m是个数。
主体是
void solve(int data,int k,int b[],int m)
{
if(data==0) //表示找到了
{
//输出b的值。
input...
return;
}
if(k==n) return;
for(i=k;i<n;i++)
if(a[i]<data) {b[m]=a[i];solve(data-a[i],i+1,b,m+1);}
}
调用是solve(64507,7,b,0);
上面是思路来着。。
说下思路吧。
用回溯来做。
把所有的数据存到一个数组里面,比如a[],共有n个。
自定义一个函数。void solve(int data,int k,int b[],int m)
data,表示当前的值,k表示所到的数组的下标。
b[]来存最后的选 出来的数,m是个数。
主体是
void solve(int data,int k,int b[],int m)
{
if(data==0) //表示找到了
{
//输出b的值。
input...
return;
}
if(k==n) return;
for(i=k;i<n;i++)
if(a[i]<data) {b[m]=a[i];solve(data-a[i],i+1,b,m+1);}
}
调用是solve(64507,7,b,0);
上面是思路来着。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询