题目是这样子的输入一个数,然后算他有多少种组合。并列出组合的结果。比如用户在屏幕上输入一个 4然后屏幕上就出现以下24组的组合
a2 a1 a4 a3
a2 a1 a3 a4
a2 a4 a3 a1
a2 a4 a1 a3
a2 a3 a1 a4
a2 a3 a4 a1
a3 a2 a1 a4
a3 a2 a4 a1
a3 a1 a4 a2
a3 a1 a2 a4
a3 a4 a2 a1
a3 a4 a1 a2
a4 a3 a2 a1
a4 a3 a1 a2
a4 a2 a1 a3
a4 a2 a3 a1
a4 a1 a3 a2
a4 a1 a2 a3
a1 a4 a3 a2
a1 a4 a2 a3
a1 a3 a2 a4
a1 a3 a4 a2
a1 a2 a4 a3
a1 a2 a3 a4本题的难点就是列来那些组合数来这个数合的个数就是所输入数的阶乘!
a2 a1 a4 a3
a2 a1 a3 a4
a2 a4 a3 a1
a2 a4 a1 a3
a2 a3 a1 a4
a2 a3 a4 a1
a3 a2 a1 a4
a3 a2 a4 a1
a3 a1 a4 a2
a3 a1 a2 a4
a3 a4 a2 a1
a3 a4 a1 a2
a4 a3 a2 a1
a4 a3 a1 a2
a4 a2 a1 a3
a4 a2 a3 a1
a4 a1 a3 a2
a4 a1 a2 a3
a1 a4 a3 a2
a1 a4 a2 a3
a1 a3 a2 a4
a1 a3 a4 a2
a1 a2 a4 a3
a1 a2 a3 a4本题的难点就是列来那些组合数来这个数合的个数就是所输入数的阶乘!
你给300分就给你答案http://lysoft.7u7.net
procedure pCollocate(mLeft, mRight: string);
var
I, L: Integer;
Temp: string;
begin
L := Length(mLeft);
if L = 0 then
begin
Temp := '';
for I := 1 to Length(mRight) do
Temp := Format('%s a%d', [Temp, Ord(mRight[I])]);
Delete(Temp, 1, 1);
mStrings.Add(Temp);
end else for I := 1 to L do begin
Temp := mLeft;
Delete(Temp, I, 1);
pCollocate(Temp, mRight + mLeft[I]);
end;
end;
var
S: string;
I: Integer;
begin
Result := False;
if not Assigned(mStrings) then Exit;
S := '';
for I := 1 to mLength do S := S + Chr(I);
mStrings.BeginUpdate;
try
mStrings.Clear;
pCollocate(S, '');
finally
mStrings.EndUpdate;
end;
Result := True;
end; { Collocate }procedure TForm1.Button1Click(Sender: TObject);
begin
Collocate(Memo1.Lines, StrToIntDef(Edit1.Text, 0));
end;a1 a2 a3 a4
a1 a2 a4 a3
a1 a3 a2 a4
a1 a3 a4 a2
a1 a4 a2 a3
a1 a4 a3 a2
a2 a1 a3 a4
a2 a1 a4 a3
a2 a3 a1 a4
a2 a3 a4 a1
a2 a4 a1 a3
a2 a4 a3 a1
a3 a1 a2 a4
a3 a1 a4 a2
a3 a2 a1 a4
a3 a2 a4 a1
a3 a4 a1 a2
a3 a4 a2 a1
a4 a1 a2 a3
a4 a1 a3 a2
a4 a2 a1 a3
a4 a2 a3 a1
a4 a3 a1 a2
a4 a3 a2 a1