close
產生互不重複的亂數

可參考洗牌程式的作法
洗法有兩種

  1. 抽牌法
    先把牌排好放在陣列中,以亂數產生 index 抽出剩餘的牌,
    直到抽完所有的牌。此法不用比對,比較麻煩的是要維護牌的陣列。

  2. 牌交換
    同樣先把牌排好放在陣列中,以亂數產生 2 個 index,
    將那兩張牌交換,即 index 所指的數值交換。
    或以亂數產生 1 個 index,由第一張依序與亂數 index 交換。

這兩種方法都不需要與已產生出來的亂數做比對,比較實用一些。

C++:
  1. //洗牌法之牌交換
  2.    int iAry[6]={1,2,3,4,5,6};
  3.    int i,j,k,temp;
  4.    for(k=0;k<100;k++) //交換100次
  5.    {
  6.      i=random(6);
  7.      j=random(6);
  8.      temp=iAry[i];
  9.      iAry[i]=iAry[j];
  10.      iAry[j]=temp;
  11.    }
  12.    printf("%d\n%d\n%d\n%d\n%d\n%d",
  13.        iAry[0],iAry[1],iAry[2],iAry[3],iAry[4],iAry[5]);

arrow
arrow
    全站熱搜

    Bluelove1968 發表在 痞客邦 留言(0) 人氣()