洗撲克牌 (亂數排序)

來源:互聯網
上載者:User

解法:

     初學者通常會直接想到,隨機產生1~N的亂數並將之存入陣列中,後來產生的亂數存入陣列前必須先檢查陣列中是否已有重複的數字,如果有這個數字就不存入,在重新產生下一個數。運氣不好的話,重複的次數就會很多,程式的執行速度就很慢了,這不是一個好辦法。

 

         以1~52的亂數排列為例好了,可以將陣列先依序由1到52填入,然後使用一個迴圈走訪陣列,並隨機產生1~52的亂數,將產生的亂數當作索引取出陣列值,並與目前陣列走訪到的值相交換,就不用擔心亂數重複的問題了,陣列走訪完畢後,所有的數字也就重新排列了。

 

         以撲克牌為例,如何判斷花色?這是除法問題。求商數判斷花色,求餘數判斷數字。

 

 

          自己寫的,一開始是打算寫成一個適用性比較強的亂數排序例子,可是又要兼顧撲克牌的特點。所以函數的起名已經參數設計的並不是太合理。

 

/* *內容: 洗撲克牌 (亂數排序)  *時間: 2/13/2013  */  #include <stdio.h>#include <stdlib.h>#include <time.h> #define MAX 52   void initNumber(int array[], int arrayLength)//初始化數組  { for (int i = 1; i < arrayLength; ++i) {array[i] = i;     } }  void randomSort(int array[], int minValue, int maxValue)//將數組進行亂數排序  { srand(time(0)); int temp = 0; int num = 0; for (int i = 1; i < maxValue; ++i) { num = rand()%(maxValue-minValue+1) + minValue;//產生該範圍的隨機數  temp = array[i]; array[i] = array[num]; array[num] = temp;    } }  void printResult(int array[], int arrayLength) { int op = 0;//用來儲存 花色  int number = 0;//用來儲存 數字  for (int i = 1; i < arrayLength; ++i) { op = (array[i]-1) /13;//對花色進行判斷 switch (op){case 0 : printf ("\t紅心"); break;case 1 : printf ("\t方塊"); break;case 2 : printf ("\t梅花"); break;case 3 : printf ("\t黑桃"); break;default: break;}number = array[i]%13;//對數字進行判斷 switch (number){case 11 : printf (" J"); break;case 12 : printf (" Q"); break;case 0  : printf (" K"); break;default : printf ("%2d ", number); break;}if ( (i%4) == 0)//換行 {printf ("\n");}     }    printf ("\n\n"); } int main(){int number[MAX+1] = {0};//建立撲克牌initNumber(number, MAX+1);//初始化撲克牌 因為撲克牌沒有0,為方便,故將數組長度+1 randomSort(number, 1, MAX); //將撲克牌進行排序 printResult(number, MAX+1);return 1;}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.