生成随机数i,然后在记录集里Move i。
解决方案 »
- cxgrid打印用dxComponentPrinter,怎样动态修改header?
- delphi dbgridEh 的继承
- DELPHI2007的大BUG! nvarchar 零长度字符更新 BUG.
- 請問如何用編程得到xp某個服務的啟動類型是什麼?
- qrreport的简单问题,打印预览能否调整大小?
- help me ! 急急急
- 要输入的参数如何一次输入自动分开比如代理和端口在ie是分开的,在其它软件可以一次多个输入
- 如何用Delphi做控件?然后在VB中用?
- 关于方向键判断的问题
- 如何调用已经编译成功的EXE程序?
- 我用PageControl新建了三个页标签,怎样锁定一个页标签始终是PageControl的ActivePage,直到解除锁定为止?
- 求够关于多页面浏览器的源代码(delphi)
var
I: Integer;
begin
Randomize;
I := Random(ADOTable1.RecordCount);
ADOTable1.RecNo := I; //得一题!
end;
begin
Randomize;
No := Random(ADOTable.RecordCount);
ADOTable.Locate('No',[No],[]);
...
end;
NoSet: Set of Integer;
begin
Randomize;
No := Random(ADOTable.RecordCount);
if No in NoSet then
begin
ADOTable.Locate('No',[No],[]);
Include(NoSet,No);
end else
...
end
...
end;
//参考主 题: 考考大家:如何随机从若干个数据中抽出指定个数据?//Kingron
作 者: Kingron (对CSDN愤怒中……)
等 级:
信 誉 值: 107
所属论坛: Delphi
问题点数: 50
回复次数: 91
发表时间: 2001-12-9 10:58:59
我看看大家对于编程的功底如何?例如从54个牌中,随机抽4张,请写出算法!
大家不要就直接用4次Random(54)就完事儿啊,再仔细想想?
回复人: BlueTrees(蜗牛) ( ) 信誉:95 2001-12-9 11:10:21 得分:50
假设数组cards[1..54]存放的是牌的的花色,TCard是花色的类型
那么可以这样
procedure get4card(var c1,c2,c3,c4:TCard);
var
card:TCard;
I,J:Integer;
begin
for J:=0 to 3 do
begin
I:=Radom(53-J)+1;
card:=Cards[I];
Cards[I]:=Cards[54-J]
Cards[54-J]:=card;
end;
c1:=Cards[54];
c2:=Cards[53];
c3:=Cards[52];
c4:=Cards[51];
end;
可以给分了吧!
回复人: zswang(伴水)(* pascal→c *) ( ) 信誉:99 2001-12-10 9:56:35 得分:0
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
begin
Randomize;
Memo1.Clear;
for I := 0 to 53 do Memo1.Lines.Add(IntToStr(I));
end;function Sortition1(mSource: TStrings; mDest: TStrings;
mCount: Integer): Boolean;
var
I, J: Integer;
begin
Result := True;
try
mDest.Clear;
for I := 1 to mCount do begin
J := Random(mSource.Count);
mDest.Add(mSource[J]);
mSource.Move(J, mSource.Count - I);
end;
except
Result := False;
end;
end; { Sortition1 }procedure TForm1.Button1Click(Sender: TObject);
begin
Sortition1(Memo1.Lines, Memo2.Lines, 4);
end;回复人: zswang(伴水)(* pascal→c *) ( ) 信誉:99 2001-12-10 10:15:57 得分:0
function Sortition2(mSource: TStrings; mDest: TStrings;
mCount: Integer): Boolean;
var
I, J, K, L: Integer;
vCnt: Integer;
begin
Result := True;
try
mDest.Clear;
vCnt := 0;
for I := 1 to mCount do begin
J := Random(mSource.Count - vCnt);
L := 0;
for K := 0 to mSource.Count - 1 do
if mDest.IndexOf(mSource[K]) < 0 then begin
if L = J then begin
mDest.Add(mSource[J]);
Inc(vCnt);
Break;
end;
Inc(L);
end;
end;
except
Result := False;
end;
end; { Sortition2 }