16,748
社区成员




procedure TForm1.Button1Click(Sender: TObject);
var
i, j, k, o, m : Integer;
begin
for m := 1 to 4 do
begin
for i := 65 to 90 do
begin
if m>1 then
begin
for j := 65 to 90 do
begin
if m > 2 then
begin
for k := 65 to 90 do
begin
if m > 3 then
begin
for o := 65 to 90 do
begin
Memo1.Lines.Add(Char(i) + Char(j) + Char(k) + Char(o));
end;
end;
Memo1.Lines.Add(Char(i) + Char(j) + Char(k));
end;
end;
Memo1.Lines.Add(Char(i) + Char(j));
end;
end;
Memo1.Lines.Add(Char(i));
end;
end;
end;
这个循环实在是太久了,不知道最后结果,不过应该是没问题的。。
program az;
type alpha26 =string;//26字母表示的26进制数
function pow_l(x:qword;n: longint):qword;
var i:longint;
re:qword;
begin
re:=1;
i:=0;
while i<>n do begin
re := re * x;
inc(i);
end;
pow_l:=re;
end;
function num2A26(x:qword ;len:longint):alpha26;
var i:longint ;
re:alpha26;
begin
setlength(re,len);
for i :=len downto 1 do begin
re[i] := chr(x mod 26 + ord('a'));
x:=x div 26;
end;
num2a26 := re;
end;
procedure printA26(len:longint);
var i:qword ;
begin
i:=0;
while i<> pow_l(26,len) do begin
write(num2A26(i,len):8);
inc(i);
end;
end;
procedure printAllA26(len:longint);
var i:longint;
begin
for i:=1 to len do
printA26(i);
end;
var n:qword;
begin
readln(n);
while(n> 0) do begin
printAllA26(n);
readln(n);
end;
end.
暴力的,没有优化的代码,pow_l可以优化一下。var
i, j, k: Byte;
begin
for i := 97 to 122 do
mmo1.Lines.Add(Char(i));
for i := 97 to 122 do
for j := 97 to 122 do
begin
mmo1.Lines.Add(Char(i) + char(j));
for k := 97 to 122 do
end;
for i := 97 to 122 do
for j := 97 to 122 do
for k := 97 to 122 do
begin
mmo1.Lines.Add(Char(i) + char(j) + char(k));
end;
end;
2.按字母排序
var
i, j, k: Byte;
begin
for i := 97 to 122 do
begin
mmo1.Lines.Add(Char(i));
for j := 97 to 122 do
begin
mmo1.Lines.Add(Char(i) + char(j));
for k := 97 to 122 do
mmo1.Lines.Add(Char(i) + char(j) + char(k));
end;
end;
end;
Type
TOutLineProc = Procedure(Const Line : String); //输出接口,调用前需要初始化
//递归每一位输出
procedure _OutPutAZ(Byte : Integer; CurrentByte : integer; Const Line : String; CallBack : TOutLineProc);
var
i : integer;
begin
if CurrentByte=Byte then
for i := Ord('a') to Ord('z') do begin
{$IFDEF CPU64}
PChar(Int64(Line)+CurrentByte)^ := Char(i);
{$ELSE}
PChar(Integer(Line)+CurrentByte)^ := Char(i);
{$ENDIF}
CallBack(Line);
end
else
for i := Ord('a') to Ord('z') do begin
{$IFDEF CPU64}
PChar(Int64(Line)+CurrentByte)^ := Char(i);
{$ELSE}
PChar(Integer(Line)+CurrentByte)^ := Char(i);
{$ENDIF}
_OutPutAZ(Byte , CurrentByte+1 , Line , CallBack);
end;
end;
//输出,MaxByte为最大位数,CallBack为回调函数,当有新行的时候就会回调该过程
procedure OutPutA2Z(MaxByte : Integer; CallBack : TOutLineProc);
var
i : integer;
Line : String;
begin
for i:=1 to MaxByte do begin
SetLength(Line , i);
_OutPutAZ(i-1 , 0, Line, CallBack);
end;
end;
//以下为调用方法
//回调过程执行非常频繁,因此应该考虑内存Buffer来处理,无论是写文件还是显示
procedure OutLineProc(Const Line : String);
begin
//注释掉这句就非常快,速度慢就慢在这里
Form1.Memo1.Lines.Add(Line);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
OutPutA2Z(3 , OutLineProc); //所用时间以位数成指数增加,请酌情考虑最大位数
end;
var
i,j: Integer;
begin
for i:=1 to 4 do //这里是你要输出的字符串长度
begin
for j:=Ord('a') to Ord('z') do
begin
Memo1.Lines.Add(StringOfChar(Chr(j),i));
end;
end;
end;