给你做好了,给分吧 function Get16Char:string; function GetOneChar(i:integer):Char; var chararray:string[36]; begin chararray:='abcdefghijklmnopqrstuvwxyz0123456789'; result:=chararray[i]; end; var i,ii:integer; begin result:=''; randomize; for i:=1 to 36 do begin ii:=random(35); result:=result+GetOneChar(ii+1); end; end;procedure TForm1.Button1Click(Sender: TObject); var str:string; begin str:=get16char; showmessage(str+' and width='+inttostr(length(str))); end;
function Get16Char:string; function GetOneChar(i:integer):Char; var chararray:string[36]; begin chararray:='abcdefghijklmnopqrstuvwxyz0123456789'; result:=chararray[i]; end; var i,ii:integer; begin result:=''; randomize; for i:=1 to 16 do//才发现没看清,把原来的36改为16即可得16位的字符串,原来的是得出36位的字符串 begin ii:=random(35); result:=result+GetOneChar(ii+1); end; end;
function Get16Char:string; function GetOneChar(i:integer):Char; var chararray:string[36]; begin chararray:='abcdefghijklmnopqrstuvwxyz0123456789'; result:=chararray[i]; end; var i,ii:integer; begin result:=''; randomize; for i:=1 to 16 do//才发现没看清,把原来的36改为16即可得16位的字符串,原来的是得出36位的字符串 begin ii:=random(35); result:=result+GetOneChar(ii+1); end; end;
function Get16Char:string; function GetOneChar(i:integer):Char; var chararray:string[36]; begin chararray:='abcdefghijklmnopqrstuvwxyz0123456789'; result:=chararray[i]; end; var i,ii:integer; begin result:=''; randomize; for i:=1 to 16 do//才发现没看清,把原来的36改为16即可得16位的字符串,原来的是得出36位的字符串 begin ii:=random(35); result:=result+GetOneChar(ii+1); end; end;
这个是组合问题,可以看看我的Blog高效率的排列组合算法 http://www.caozu.com/hey/u/ccdarkness/20079261644.shtml高效率的排列组合算法 delphi实现代码 http://www.caozu.com/hey/u/ccdarkness/200792704445.shtml combination(const m, r: byte): cardinal; // 组合 var i, j, vLen, icount: byte; vn: array of byte; //下标数组 b: boolean; Count: cardinal; begin setlength(vn, m); //分配m个空间 vLen := length(vn); for i := 0 to r - 1 do vn[i] := 1; b := true; Count := 0; while b do begin inc(count); b := false; for i := 0 to vLen - 1 do if vn[i] = 0 then if i <> 0 then if vn[i - 1] = 1 then begin b := true; vn[i] := 1; vn[i - 1] := 0; begin //移动1到最前端 icount := 0; for j := 0 to i - 1 do if vn[j] = 1 then inc(icount); for j := 0 to i - 1 do if j < icount then vn[j] := 1 else vn[j] := 0; end; break; end; end; result := count; end;
算法爆简单,代码爆麻烦的写法 program Project6;{$APPTYPE CONSOLE}uses SysUtils;const allchars = '1234567890abcedfghijklmnopqrstuvwxyz';var i,j,k,l : integer; begin for i := 1 to Length(allchars) do for j := 1 to Length(allchars) do for k := 1 to Length(allchars) do for l := 1 to Length(allchars) do WriteLn(allchars[i] + allchars[j] + allchars[k] + allchars[l]); ReadLn; end. 这只是四位的。
function Get16Char:string;
function GetOneChar(i:integer):Char;
var
chararray:string[36];
begin
chararray:='abcdefghijklmnopqrstuvwxyz0123456789';
result:=chararray[i];
end;
var
i,ii:integer;
begin
result:='';
randomize;
for i:=1 to 36 do
begin
ii:=random(35);
result:=result+GetOneChar(ii+1);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
begin
str:=get16char;
showmessage(str+' and width='+inttostr(length(str)));
end;
function GetOneChar(i:integer):Char;
var
chararray:string[36];
begin
chararray:='abcdefghijklmnopqrstuvwxyz0123456789';
result:=chararray[i];
end;
var
i,ii:integer;
begin
result:='';
randomize;
for i:=1 to 16 do//才发现没看清,把原来的36改为16即可得16位的字符串,原来的是得出36位的字符串
begin
ii:=random(35);
result:=result+GetOneChar(ii+1);
end;
end;
function GetOneChar(i:integer):Char;
var
chararray:string[36];
begin
chararray:='abcdefghijklmnopqrstuvwxyz0123456789';
result:=chararray[i];
end;
var
i,ii:integer;
begin
result:='';
randomize;
for i:=1 to 16 do//才发现没看清,把原来的36改为16即可得16位的字符串,原来的是得出36位的字符串
begin
ii:=random(35);
result:=result+GetOneChar(ii+1);
end;
end;
function GetOneChar(i:integer):Char;
var
chararray:string[36];
begin
chararray:='abcdefghijklmnopqrstuvwxyz0123456789';
result:=chararray[i];
end;
var
i,ii:integer;
begin
result:='';
randomize;
for i:=1 to 16 do//才发现没看清,把原来的36改为16即可得16位的字符串,原来的是得出36位的字符串
begin
ii:=random(35);
result:=result+GetOneChar(ii+1);
end;
end;
思路很简单
首先定义一个数组,即包含小写字母和数字的数组,当然这里我直接使用了string
其次随机字串的下标,从而得到一个字符,循环16次,即得到你需要的16位字串
答题者没看懂题目。
http://www.caozu.com/hey/u/ccdarkness/20079261644.shtml高效率的排列组合算法 delphi实现代码
http://www.caozu.com/hey/u/ccdarkness/200792704445.shtml
combination(const m, r: byte): cardinal; // 组合
var
i, j, vLen, icount: byte;
vn: array of byte; //下标数组
b: boolean;
Count: cardinal;
begin
setlength(vn, m); //分配m个空间
vLen := length(vn);
for i := 0 to r - 1 do
vn[i] := 1;
b := true;
Count := 0;
while b do
begin
inc(count);
b := false;
for i := 0 to vLen - 1 do
if vn[i] = 0 then
if i <> 0 then
if vn[i - 1] = 1 then
begin
b := true;
vn[i] := 1;
vn[i - 1] := 0;
begin //移动1到最前端
icount := 0;
for j := 0 to i - 1 do
if vn[j] = 1 then
inc(icount);
for j := 0 to i - 1 do
if j < icount then
vn[j] := 1
else
vn[j] := 0;
end;
break;
end;
end;
result := count;
end;
program Project6;{$APPTYPE CONSOLE}uses
SysUtils;const
allchars = '1234567890abcedfghijklmnopqrstuvwxyz';var
i,j,k,l : integer;
begin
for i := 1 to Length(allchars) do
for j := 1 to Length(allchars) do
for k := 1 to Length(allchars) do
for l := 1 to Length(allchars) do
WriteLn(allchars[i] + allchars[j] + allchars[k] + allchars[l]); ReadLn;
end.
这只是四位的。