谁能帮忙写出这个算法。(100分)

  • 主题发起人 主题发起人 zhuangjunx
  • 开始时间 开始时间
Z

zhuangjunx

Unregistered / Unconfirmed
GUEST, unregistred user!
从1到自然数y,求从1-y中选择m个数字,这m个数字的和等于S的组合,并输出结果到文本文件.其中每一个组合中数字不重复.其中,Y,M,S 由用户输入.
比如
y=10 m=3 s=15
1-10的数字
结果是
2+5+8
3+4+8
6+7+2
4+5+6
这样,每个组合中数字不能重复。
 
你是要c#的代码还是delphi的?
 
C#的吧。
如果不麻烦,两个都帮我写一下。谢谢。
 
procedure printer(var a:array of integer);
var
str:string;
i:integer;
begin
for i:=1 to a[0]do
str:=str+inttostr(a)+' ';
form1.ListBox1.Items.Add(str);
//打印出数据
end;
function GetArrayVal(var a:array of integer):integer;
var
i:integer;
begin
result:=0;
for i:=1 to A[0]do
result:=Result+A;
end;

procedure GetNubArray(y,M,S:integer);
var
Narray:array [0..1024] of integer;
i,j,k:integer;
pos:integer;
Stemp:integer;
begin
i:=1;
Narray[0]:=1;
Narray[1]:=1;
for j:=2 to Mdo
Narray[j]:=0;
while(true)do
begin
if Narray[1]>y-m then
break;
pos:=Narray[0];
Stemp:=GetArrayVal(Narray);
if (Stemp>=S) then
begin
if (M=pos) and (Stemp=S) then
Printer(Narray);
Narray[0]:=pos-1;
Narray[pos-1]:=Narray[pos-1]+1;
continue;
end;
if Stemp<s then
begin
/////////////////
if pos<M then
begin
if Narray[pos]<y then
begin
Narray[0]:=pos+1;
Narray[pos+1]:=Narray[pos]+1;
end
else
begin
Narray[0]:=pos-1;
Narray[pos-1]:=Narray[pos-1]+1;
end;
end;
////////////
/////////////////
if pos=M then
begin
if Narray[pos]<y then
begin
Narray[pos]:=Narray[pos]+1;
end
else
begin
Narray[0]:=pos-1;
Narray[pos-1]:=Narray[pos-1]+1;
end;
end;
////////////
end;
end;
end;
 
调用方法
GetNubArray(15,3,25);
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
845
DelphiTeacher的专栏
D
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
911
SUNSTONE的Delphi笔记
S
D
回复
0
查看
890
DelphiTeacher的专栏
D
D
回复
0
查看
624
DelphiTeacher的专栏
D
后退
顶部