求一个算法,各位走过,路过的朋友,请进帮忙...多谢! ( 积分: 100 )

  • 主题发起人 主题发起人 Sdelphi_fu
  • 开始时间 开始时间
S

Sdelphi_fu

Unregistered / Unconfirmed
GUEST, unregistred user!
求一个算法:
有10组数,如:A、B、C、D、E、F、G、H、I、J,任取出其中三个数不分先后,
如:(A,B,C)和(B,A,C)算相同,请算出有多少组,是哪一些,如何算出?多谢!
[?][?][?]
 
procedure TForm1.Button1Click(Sender: TObject);
var
s: TStrings;
i,j,k,n: Integer;
begin
s := TStringList.Create;
s.CommaText := 'A,B,C,D,E,F,G,H,I,J';
n := s.Count - 4;
try
for i := 0 to n do
for j := (i + 1) to n do
for k := (j + 1) to n do
Memo1.Lines.Add(s.Strings + ',' + s.Strings[j] + ',' + s.Strings[k]);
finally
s.Free;
end;
end;
 
TO liyinwei:
你好,你的算出来的组合数是不是(10*9*8)/(1*2*3)=120组数?
 
不好意思
n := s.Count - 4;
应该改为
n := s.Count - 3;

获得的组合数为56
 
测试过,上面的代码有误,修改后
procedure TForm1.Button1Click(Sender: TObject);
var
s: TStrings;
i,j,k,n: Integer;
begin
Memo1.Clear;
s := TStringList.Create;
s.DelimitedText := 'A,B,C,D,E,F,G,H,I,J';
n := s.Count - 3;
try
for i := 0 to n do
for j := (i + 1) to (n + 1) do
for k := (j + 1) to (n + 2) do
Memo1.Lines.Add(s.Strings + ',' + s.Strings[j] + ',' + s.Strings[k]);
finally
s.Free;
end;
Memo1.Lines.Add(IntToStr(Memo1.Lines.Count));
end;
 
又是组合, n应该是s.Count-1才对(2楼),
同这个帖是一样的问题
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3863266

function GetList(const S: string; Strs: TStrings): Integer;
var
I, J, K: Integer;
begin
Strs.Clear;
for I := 1 to Length(S) do
for J := I + 1 to Length(S) do
for K := J + 1 to Length(S) do
Strs.Add(S + S[J] + S[K]);
Result := Strs.Count;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := IntToStr(GetList('ABCDEFGHIJ', ListBox1.Items)); //120
end;
 
n := s.Count - 3; 是正确的,如果是n := s.Count - 1 ,则后面的代码就需要修改了,上面二个的算法思路是一样的.只是形式不同而已
 
后退
顶部