问题也许没有描叙的很清楚,可能是表达能力有限吧。
如上举例:25个整型数组,分7段,s1-s7,则每段包含的元素个数分别为s1=4,s2=4,s3=4,s4=4,s5=3,s6=3,s7=3,则第一个可能的分段组合为:
1 2 3 4,5 6 7 8,9 10 11 12,13 14 15 16,17 18 19,20 21 22,23 24 25。
这个问题应该是这25个数的所有排列组合了, 1+2+3+...+24+1=301;
string也可以看作是Char的数组,先用string简单点来试下
function GetLists(Strs: TStrings): Integer;
procedure Exchange(var S: string;
const Idx1, Idx2: Integer);
var
C: Char;
begin
C := S[Idx1];
S[Idx1] := S[Idx2];
S[Idx2] := C;
end;
var
S: string;
I, J: Integer;
begin
S := 'abcdefghijklmnopqrstuvwxy';
Strs.Clear;
Strs.begin
Update;
try
Strs.Add(S);
for I := 1 to Length(S)do
for J := I + 1 to Length(S)do
begin
Exchange(S, I, J);
Strs.Add(S);
//S := 'abcdefghijklmnopqrstuvwxy';
end;
finally
Strs.EndUpdate;
end;
Result := Strs.Count;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := IntToStr(GetLists(Memo1.Lines));
end;