求生成一个长度为16位小写字母加数字的所有组合的思路或代码
各位朋友,小弟想用DELPHI写一个程序,生成一个长度固定为16位的,小写字母+数字的所有组合,请问思路如何,又或者能否提供相关的代码,请各位朋友赐教,谢谢!!!
如:a123456789012345、abcdefghij123abc。。。。。。总之就是小写字母加数字的所有组合。
[解决办法]
给你做好了,给分吧
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;
[解决办法]
后面的是符合你的要求,前一个没看清,返回的是一个36位的字串,后一个改成你需要的了,返回一个16位的字串
思路很简单
首先定义一个数组,即包含小写字母和数字的数组,当然这里我直接使用了string
其次随机字串的下标,从而得到一个字符,循环16次,即得到你需要的16位字串
[解决办法]
random能生成楼主所需要的所有组合?
答题者没看懂题目。
[解决办法]
不会是把所有可能的结果都列出吧,那也太多了36的16次方,楼上的你慢慢整吧,想楼主要这也没用
[解决办法]
这个是组合问题,可以看看我的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.
这只是四位的。