首页  编辑  

随机抽取问题

Tags: /超级猛料/Alogrith.算法和数据结构/常用算法/   Date Created:

我看看大家对于编程的功底如何?例如从54个牌中,随机抽4张,请写出算法!

大家不要就直接用4次Random(54)就完事儿啊,再仔细想想?

假设数组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;

回复人: zswangII(伴水II)(需要充充电)(副本) (  ) 信誉:100  2001-12-9 21:30:37  得分:0  

 //前辈,仔细看看我得算法呀

//已经有了Randomize;

const

 Count = 54;

var

 List: array[1..Count] of Integer; //牌

 I: Integer;

 T: Integer;

 J: Integer;

begin

 for I := 1 to Count do List[I] := I; //得到有序完整牌

 for I := 1 to Count do begin //模拟洗牌

   T := List[I];

   J := Random(Count) + 1;

   List[I] := List[J];

   List[J] := List[I]; //随机交换两张牌

 end; //现在牌已经洗了

 Memo1.Clear;

 for I := 1 to Count do Memo1.Add(IntToStr(List[I])); //顺序发牌不只4张吧!

end;