求一个函数!在线等(100分)

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

SP229

Unregistered / Unconfirmed
GUEST, unregistred user!
比如10个字符:分别是A..J;要求通过一个函数得到如下的一个字符列表:
A+B
A+C
...
A+J
A+B+C
A+B+D
...
A+B+J
A+B+C+D
A+B+C+E
...
A+B+C+J
A+B+C+D+E
...
A+B+C+D+E+..+J
B+C
B+D
....
B+J
B+C+D
.....
function GetStr:TStrings;
 
这个不难啊...写个就最...等下.我帮你写....
 
好的,就在线上等你
 
用到递归算法哦,,,
思路很简单的
 
to dcs_dcs
写一段代码!
 
下面这段代码完全可以实现上面的功能,请那位帮忙改改!
如TStrings的count=5
strings[0]..strings[4]为1,2,3,4,5
MAX_NUM:=TStrings.Count
procedure TForm1.Button2Click(Sender: TObject);
const
MAX_NUM = 5;
var
nNum: array[0..MAX_NUM] of Integer;
i, j: Integer;
sNum: string;
begin
for i:= 0 to MAX_NUMdo
nNum:= 0;
i := 1;
while i > 0 do
begin
if nNum = 0 then
nNum:= nNum[i-1] + 1 else
Inc(nNum);
if nNum <= MAX_NUM then
begin
sNum:= '';
for j:= 1 to i do
sNum := sNum + IntToStr(nNum[j]) + '+';
for j:= i + 1 to MAX_NUM do
nNum[j] := 0;
Memo1.Lines.Add(sNum);
Inc(i);
end else
Dec(i);
end;
end;
 
function GetStr(n:integer):TStrings;
const ss='ABCDEFGHIJ';
var oStrList:TStrings;
k:integer;
st:set of byte;
procedure goStr(t:integer;
s:string);
var i:integer;
begin
if t=k+1 then
begin
oStrList.Add(s);
exit;
end;

for i:=1 to 10do
if not(i in st) then
begin
st:=st+;
goStr(t+1, s+'+'+ss);
st:=st-;
end;
end;

begin
oStrList:=TStringList.Create;
for k:=1 to n-1do
begin
st:=[k];
goStr(1,ss[k]);
end;
Result:=oStrList;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Text:=GetStr(5).Text;
end;
 
to plenilune
请把你的这个参数改改:
function GetStr(Strings: TStrings;n:integer):TStrings;
把const ss='ABCDEFGHIJ';放在Strings中
 
to plenilune
请把下面这种情况去除:
A+B+C+D
D+B+C+A
C+B+A+D
....
位置发生变化,但字母元素相同.
 
排列组合问题,已经控件化解决了:
http://www.1zwwz.cn/show.php?mod=article&amp;id=1887
http://www.1zwwz.cn/show.php?mod=article&amp;id=1888
 
通用的排列数生成控件,看了下原码,应该能解决LZ的问题
 
Function GetStrings(Strings:TStringList;
L:Integer):TStringList;
var i,j,Count,Max_Num:Integer;
s:String;
begin
Result := TStringList.Create;
try
if Strings.Count < L then
Max_Num := Strings.Count
else
Max_Num := L;
For i := 0 to Max_Num - 1do
begin
For j := i to Max_Num - 1do
begin
s := '';
Count := i;
while Count <= jdo
begin
s := s + Strings.Strings[Count] + ' ';
inc(Count);
end;
Result.Add(s);
end;
end;
except
Result.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Strings1,Strings2:TStringList;
begin
Strings1 := TStringList.Create;
try
Strings1.Add('a');
Strings1.Add('b');
Strings1.Add('c');
Strings2 := GetStrings(Strings1,3);
Memo1.Lines.Assign(Strings2);
finally
Strings1.Free;
Strings2.Free;
end;
end;
 
TO xiaopei
参数L是控制Result这的.
procedure TForm1.Button1Click(Sender: TObject);
var Strings1,Strings2:TStringList;
begin
Strings1 := TStringList.Create;
try
Strings1.Add('a');
Strings1.Add('b');
Strings1.Add('c');
Strings1.Add('d');
Strings1.Add('e');
Strings1.Add('f');
Strings2 := GetStrings(Strings1,3);
Memo1.Lines.Assign(Strings2);
finally
Strings1.Free;
Strings2.Free;
end;
end;

MEMO中结果为:
a
a b
a b c
a b c d //如果L=3这行删除
a b c d e //如果L=3,4这行删除
a b c d e f //如果L=3,4,5这行删除
b
b c
b c d
b c d e //如果L=3这行删除
b c d e f //如果L=4这行删除
c
c d
c d e
c d e f //如果L=3这行删除
d
d e
d e f
e
e f
f
 
xiaopei给你加100分
 
后退
顶部