我看看大家对于编程的功底如何?例如从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;