unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,strutils;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
function digui(slist1,slist2:tstrings):tstringlist;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
i,j:integer;
str1,str2:tstrings;
begin
str1:=tstringlist.Create;
str2:=tstringlist.Create;
s:=trim(edit1.Text);
memo1.Clear;
while length(s)<>0 do
begin
if (memo1.Lines.Count=0) then
memo1.Lines.Add(leftstr(s,1))
else if (memo1.Lines.IndexOf(leftstr(s,1))=-1) then
memo1.Lines.Add(leftstr(s,1));
delete(s,1,1);
end;
str1.AddStrings(memo1.Lines);
str2.Addstrings(memo1.Lines);
for i:=0 to str2.Count-2 do
str2.AddStrings(digui(str1,str2));
//showmessage(s);
memo2.Clear;
memo2.Lines.AddStrings(str2);
end;
function TForm1.digui(slist1,slist2:tstrings):tstringlist;
var i,j:integer;
slist:tstrings;
begin
slist:=tstringlist.Create;
result:=tstringlist.Create;
result.clear;
slist.Clear;
slist.AddStrings(slist2);
slist2.Clear;
for i:=0 to slist1.count-1 do
begin
for j:=0 to slist.Count-1 do
begin
//showmessage(inttostr(pos(slist1,slist[j])));
if (slist.Count=1) then
result.Add(slist[j])
else if pos(slist1,slist[j])=0 then
result.Add(slist1+slist[j]);
end;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
memo2.ScrollBars:=ssboth;
end;
end.
无聊加郁闷的情况下总算才写出来这个递规,看来我这辈子碰到递规就要走人了.
edit 里输入任意字符,当然可以随便重复, memo1 其实只是个中介作用,用来把字符分出来,
memo2 用来显示各种组合. 大概测试了下,不知道有无问题.
其实一个简单的递规,当初递规考虑的方向错了,唉 害的面试的时候没做出来.