如题,我现在想知道如何使20张照片随机的排列
解决方案 »
- 如何将Delphi的字符串 caption = #25511#21046#22120 直接转成汉字?
- delphi自身数据库如何转换为sql数据库
- 找一些好的DELPHI入门书籍
- 在qr报表中怎样动态选择打印机?
- 谁做过高校学生收费注册系统,请提建议!1
- 啊,又出现一个调试问题,大家帮帮我啊!
- 高分求~!如何建立与windows资源管理器 中的树型目录 的功能,具有插入和删除。
- 我最喜欢的语言是Delphi,但是到了公司叫我用PB。
- 请问如何把一个已知表的结构复制生成另一个表的结构?
- 请教:关于GIS编程中的寻路问题
- 加了件衣服,按规矩散分,顺便问两个小问题
- 攒了半个月弄了这么点可用分,都散了,本来想庆祝深思结婚的,有人先了,呵呵,我就再散一次!!!!
都可以采取数组数据结构,然后抽象为20个数<下标>之类的复杂度为 o(n) = n(n-1)/2 理论上你的随机数的范围尽量取大一点
比如为 rand(1000000) mod 20;
FileName: array[0..19] of string; // 保存所有的文件名
ExistIndex: array[0..19] of BYTE; // 保存已经选取的图片<文件下标> 唯一
NowIndex: Integer; // 保存当前ExistIndex中的已经正确选取的文件的下标 I: Integer;
I := 0;
// 0. 初始化数据FileName 为你的文件名
// 1. 初始化数组ExistIndex 都为255 表示都没有...
while I < 20 do
begin
// 1. 产生随机数N<就是下标>
// 2. 将此下标到ExistIndex中查找
// 2.1 如果找到 说明重复 继续
// 2.2 如果没找到 则
// 2.2.1 Inc(I);
// 2.2.2 将N加到数组ExistIndex中 ExitIndex[NowIndex] := N
// 走了 代码很简单 这个算法也比较简单...有问题 明天再说 OK?
end;
function IntExist(OprInt: Integer; MyArray: array of Integer): Boolean;
var
i: Integer;
begin
Result := False;
for i := 0 to High(MyArray) do
if OprInt = MyArray[i] then
begin
Result := True;
Break;
end;
end; //产生随机数组
SetLength(RandomArray, 20);
i := 0;
repeat
Randomize;
tempInt := Random(21); //这里产生0~20的随机数
if not IntExist(tempInt, RandomArray) then //这里可以排除0
begin
RandomArray[i] := tempInt;
Inc(i);
end;
until i = 20;
但是 random(100000)所能产生的数空间更大...<当然了 这些都是所谓的伪随机数..>
这样的话 重复性是更小一点...OK 楼上的代码应该可以搞定了 楼主还没搞清楚么,我上面的算法应该是比较清楚的吧。。
var
iVal: array[0..19] of Integer;
i, iTmp: Integer;
begin
Randomize;
for i := 0 to 19 do
iVal[i] := 0; repeat
iTmp := Random(20) + 1;
for i := 0 to 19 do
begin
if iVal[i] = iTmp then
break
else if iVal[i] = 0 then
begin
iVal[i] := iTmp;
break;
end;
end;
until (iVal[19] <> 0);
end;