中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

C語(yǔ)言經(jīng)典算法 - 洗牌算法

2018-07-20    來(lái)源:open-open

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用
說(shuō)明:
洗撲克牌的原理其實(shí)與亂數(shù)排列是相同的,都是將一組數(shù)字(例如1~N)打亂重新排列,只
不過(guò)洗撲克牌多了一個(gè)花色判斷的動(dòng)作而已。
解法:
初學(xué)者通常會(huì)直接想到,隨機(jī)產(chǎn)生1~N的亂數(shù)并將之存入陣列中,后來(lái)產(chǎn)生的亂數(shù)存入陣列
前必須先檢查陣列中是否已有重復(fù)的數(shù)字,如果有這個(gè)數(shù)就不存入,再重新產(chǎn)生下一個(gè)數(shù),運(yùn)
氣不好的話,重復(fù)的次數(shù)就會(huì)很多,程式的執(zhí)行速度就很慢了,這不是一個(gè)好方法。
以1~52的亂數(shù)排列為例好了,可以將陣列先依序由1到52填入,然后使用一個(gè)回圈走訪陣列,
并隨機(jī)產(chǎn)生1~52的亂數(shù),將產(chǎn)生的亂數(shù)當(dāng)作索引取出陣列值,并與目前陣列走訪到的值相交換,
如此就不用擔(dān)心亂數(shù)重復(fù)的問(wèn)題了,陣列走訪完畢后,所有的數(shù)字也就重新排列了。
至于如何判斷花色?這只是除法的問(wèn)題而已,取商數(shù)判斷花色,取余數(shù)判斷數(shù)字,您可以直接
看程式比較清楚。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 52
int main(void)
{
  int poker[N + 1];
  int i, j, tmp, remain;
  // 初始化陣列
  for (i = 1; i <= N; i++)
    poker[i] = i;
  srand(time(0));
  // 洗牌
  for (i = 1; i <= N; i++)
  {
    j = rand() % 52+1;
    tmp = poker[i];
    poker[i] = poker[j];
    poker[j] = tmp;
  }
  for (i = 1; i <= N; i++)
  {
    // 判斷花色
    switch ((poker[i] - 1) / 13)
    {
      case 0:
        printf("桃");
        break;
      case 1:
        printf("心");
        break;
      case 2:
        printf("磚");
        break;
      case 3:
        printf("梅");
        break;
    }
    // 撲克牌數(shù)字
    remain = poker[i] % 13;
    switch (remain)
    {
      case 0:
        printf("K ");
        break;
      case 12:
        printf("Q ");
        break;
      case 11:
        printf("J ");
        break;
      default:
        printf("%d ", remain);
        break;
    }
    if (i % 13 == 0)
      printf("\n");
  }
  return 0;
}

標(biāo)簽:

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:python編寫(xiě)的最簡(jiǎn)單的web服務(wù)器

下一篇:linux下通過(guò)python獲得指定網(wǎng)卡的ip地址