少的,简单的可以这样(这是最不好的)for i := 1 to 3 do for j := 1 to 3 do for k := 1 to 3 do begin if (i <> j) and (j <> k) and (i <> k ) then ShowMessage(IntToStr(i) + IntToStr(j) + IntToStr(k)) ; end;
呵呵,兄弟们啊,要是这么简单我也就不问了. 他是有N个啊.... 说来好笑,前段时间去朋友那里,他们在开发一个软件,客户对编号有一个要求,为何有这般要求我都还丈二和尚的.那就是用这三个字符来编码,要求每个编码中,这三个字符至少出现一次,而且有十三位啊,要用程序打印出来,不能重复.我就是想啊想,想不出什么好办法来.不过,要是笨方法的话,应当不难吧. 比如: for i:=1111111111111 to 3333333333333 begin db.append; db("id") = i; end;再来个唯一查询,打印就可以了嘛,是不是?
多的全排列 ,From kyee(浪子阿鹏) ,这是所见的最简单的 procedure StringRank(A, B: String); var C: Char; S: String; i, Len: Integer; begin Len := Length(A); if Len = 0 then StringPrint(B) else for i := 1 to Len do begin C := A[i]; S := Copy(A, 1, i - 1); if Pos(C, S) = 0 then StringRank(S + Copy(A, i + 1, Len - i), C + B); end; end;调用 : StringRank('1234','') //得到1234的全排列
我做过类似的作业,不同的是用的是0,1,2,显示N个数,我的方法是 for i := 0 to n - 1 do begin 将数 i 转换为三进制数 打印 end; 你的情况类似的吧,也可以用上面的方法,只不过打印的时候用3替换0就可以了
for j := 1 to 3 do
for k := 1 to 3 do
begin
if (i <> j) and (j <> k) and (i <> k ) then ShowMessage(IntToStr(i) + IntToStr(j) + IntToStr(k)) ;
end;
他是有N个啊....
说来好笑,前段时间去朋友那里,他们在开发一个软件,客户对编号有一个要求,为何有这般要求我都还丈二和尚的.那就是用这三个字符来编码,要求每个编码中,这三个字符至少出现一次,而且有十三位啊,要用程序打印出来,不能重复.我就是想啊想,想不出什么好办法来.不过,要是笨方法的话,应当不难吧.
比如:
for i:=1111111111111 to 3333333333333
begin
db.append;
db("id") = i;
end;再来个唯一查询,打印就可以了嘛,是不是?
var
C: Char;
S: String;
i, Len: Integer;
begin
Len := Length(A);
if Len = 0 then
StringPrint(B)
else for i := 1 to Len do
begin
C := A[i];
S := Copy(A, 1, i - 1);
if Pos(C, S) = 0 then
StringRank(S + Copy(A, i + 1, Len - i), C + B);
end;
end;调用 : StringRank('1234','') //得到1234的全排列
for i := 0 to n - 1 do
begin
将数 i 转换为三进制数 打印
end;
你的情况类似的吧,也可以用上面的方法,只不过打印的时候用3替换0就可以了