解决方案 »

  1.   

    procedure TForm1.myarray(sender: TObject);
    type 
      card:record
          number:integer;
          picture:integer;
          end;
    var i,t:integer;
        a:array[0..59] of card;
        b:array[0..53] of card;
    begin
      for i:0 to 53 do 
        begin 
          a[i].number:=(i mod 13)+1;
          a[1].picture:=(i div 13)+1;
        end;
      i:=0;
      repeat
        t:=random(53);
        if not (a[t].number=0) then
          begin
            i:=i+1;
            b[i-1]:=a[t];
            a[t].number:=0;
          end;
      until i=60;
      for i:=0 to 53 do 
      begin
      paintmycard(b[i])
      end;
    end;
      

  2.   

    a[0]=0 a[1]=1 .........a[53]=53  标志f=53
    在54个数中取随即数
    如取5则a[5]和最后一个数a[f]交换

    a[0]=0 a[1]=1 .....a[5]=53....a[53]=5    f=52
    再在53个数中取随即数(由f控制范围)
    .
    .
    直到f=1
    a[0]...a[53]就是随即序列
    一共53次自己想的,不知对不对
      

  3.   

    begin
    var
      j, tmp, Index: Integer;
      
      for j := 0 to 79 do
      begin
        // 随机取出一张牌
        Index := Random(80);
        // 开始交换数据
        tmp := Card[j]; // 把当前的牌临时存放,以便交换
        // 当前(j)的牌与随机取出的牌(Index)不一样的时候
        // 用随机取出的牌与当前的(j)的牌交换
        if Card[j] <> Card[Index] then
        begin
          Card[j] := Card[Index];
          Card[Index] := tmp;
        end;
      end;
    end.此算法可以将原来的数组打乱,就是洗牌。
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
       i,n,x:byte;
       Num,tmp:array[1..54]of byte;
    begin
       for i:=low(tmp) to high(tmp) do
          tmp[i]:=i;
       Randomize;
       i:=54;
       n:=0;
       Memo1.Text :='';
       while i>1 do
       begin
          x:= Random(i);
          if tmp[x]>0 then
          begin
              inc(n);
              Num[n]:=tmp[x];
              tmp[x]:=tmp[i];//把最后一位放到当前位置
              tmp[i]:=0;
              dec(i);
              Memo1.Lines.Add(format('%d    %d',[n,Num[n]]));
              if i=1 then
              begin
                inc(n);
                Num[n]:=tmp[i];
                Memo1.Lines.Add(format('%d    %d',[n,Num[n]]));
              end;
          end;
       end;
       Memo1.Lines.Add('搞定');
    end;