任意数之和为M,求任意数(20分)

J

jonva

Unregistered / Unconfirmed
GUEST, unregistred user!
有n个数(a1,a2,a3......,an),设任意数之和为M,求任意数.(a1=m,a2=m...,an=m,a1+a2=m,a1+a3=m...a1+a2+...+an=m)
 
这个很简单的,很几个循环或者递归很好写出来的。
 
具体如何?
 
用回溯法啊,应该可以的吧
 
这个问题比较简单,我现写一个吧,没有上机试过,不过应该不会错的[8D]
const maxn=100000;
var
ans:array[1..maxn] of integer;
n:integer;
procedure printout(c:integer);
var i:integer;
begin
for i:=1 to c do
write(ans,' ');
writeln;
end;
procedure nextone(nowmax,count:integer);
var i:integer;
begin
for i:=1 to nowmax do
begin
asn[count]:=i;
if nowmax-i=0 then
printout(count)
else
nextone(nowmax-i,count+1);
end;
end;
begin
readln(n);
nextone(n,1);
end.
 
是个无重复的组合问题。
 
还是不行,能否更清楚些,兄弟?
 
谁能告诉我理想的课堂作文?
 
现将所提问题转为实际中的问题:客户汇来货款,现欲将其冲消未付款之订单,
谁能求出满足条件的这些订单来???
 
您的问题和这个问题非常相似:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1016791
您的问题可以看成:某用户有若干金额不一的未付款订单,现在汇来一笔已知数额的货款,
欲求将这笔货款分配到未付款订单的最佳方案。
——我认为,最佳的方案是,找到这样一个订单集合,使得它们的和与货款最接近(可以
相等,但是不能超过货款)。我在1016791提出的算法刚好能够完美的解决这个问题。 :))
——有任何实现上的问题尽管提。 :)
——请您费神看看那个帖子,我实在不想把代码又重新贴一遍。
ps:
这个问题是不是应该归到“数据结构”分类去?
 
接受答案了.
 
顶部