EvoTalk

07 十二月, 2005

產生互不重複的亂數

Posted by: asd In: C++| Code Snippet| 程式設計 ()

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

  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]);

Most Commented Posts



No Responses to "產生互不重複的亂數"

Comment Form


  • BK: 大於和小於在今日更廣泛地使用於標籤上,故在此補充該英文用法: : angle bracket []: square bracket
  • luh1688: 非常實用且謝謝!~
  • asd: 好的,不過很久沒修改了,不知道能不能動 寄到您的yahoo信箱
  • LIANG: nice post, thank you
  • Justmaker: 您好,請問可以跟你要source嗎?我最近有在看股票,想要enhance您的小工具,不知是否可以開放?

Category