求生成函数的算法(字典生成器)(50分)

  • 主题发起人 主题发起人 Dale46
  • 开始时间 开始时间
D

Dale46

Unregistered / Unconfirmed
GUEST, unregistred user!
求生成函数的算法(字典生成器)
比如给定元素
a,b,c,1,2,3
要求生成字符串
a
b
c
1
2
3
aa
ab
ac
a1
a2
a3
ba
bc
..
..
aaa
aab
aac
...
求生成函数的算法
要求,函数的接口是 function dic(input:string):string;
如,dic('a')->'b'
dic('b')->'c'
dic('3')->'aa'
 
不会没人知道吧?
给点提示也可以呀.
 
试试!还没测试!
Procedure Form1.button1click(sender:Tobject):
var Length:integer;
ss:string;
StrList:Stringlist;
begin
ss:='';

Length:=StrToInt(Length_edit.Text);

recur(length,ss,StrList);

end;

procedure Form1.Recus(Length:Integer,ss:String,StrList:Stringlist);
var A,B:string;
sss:set of {'a',...'z','0',...'9'};

i:Integer;
begin
for i:=0 to 35do
begin
B:=A+sss;

StrList.add(B;

if length>0 then
begin

recurs(Length,B,StrList);

end;
length:=Length-1;

end;
end;
 
要求,函数的接口是 function dic(input:string):string;
如,dic('a')->'b'
你这样不行呀
 
这是一个变形了的加法进位问题:
function Dic(const Src:String):String;
const
MaxLength=16;
DicString='abc123';
DicStrLength=Length(DicString);
var
A:array[1..MaxLength]of Integer;
i,j,SrcLen:Integer;
functiondo
Add(Level:Integer):Boolean;
//true:有进位
begin
Result:=false;
if A[Level]=DicStrLength then
begin
if Level=1 then
begin
Result:=true;
exit
end
else
Result:=DoAdd(Level-1);
end
else
Inc(A[Level]);
end;
begin
SrcLen:=Length(Src);
for i:=1 to Length(Src)do
A:=Pos(Src,DicString);
Result:='';
ifdo
Add(SrcLen) then
begin
SetLength(Result,SrcLen+1);
for i:=1 to SrcLen+1do
Result:=DicString[1];
end
else
begin
SetLength(Result,SrcLen);
for i:=1 to SrcLendo
Result:=DicString[A];
end;
end;
 
ok, thanks.
let me try
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
686
SUNSTONE的Delphi笔记
S
S
回复
0
查看
663
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部