<form id="dlljd"></form>
        <address id="dlljd"><address id="dlljd"><listing id="dlljd"></listing></address></address>

        <em id="dlljd"><form id="dlljd"></form></em>

          <address id="dlljd"></address>
            <noframes id="dlljd">

              聯系我們 - 廣告服務 - 聯系電話:
              您的當前位置: > 關注 > > 正文

              天天關注:C語言算法---撲克牌排序問題描述

              來源:CSDN 時間:2023-03-31 07:49:34

              文章目錄


              (資料圖片僅供參考)

              撲克牌排序問題描述 :輸入說明 :輸出說明 :輸入范例 :輸出范例 :解題思路參考代碼

              撲克牌排序

              問題描述 :

              明明和他的三位同學在玩一種非常有趣的撲克牌游戲。

              在這個游戲中,一副牌的大小怪被除去,然后把剩下的 52 張牌隨機發給 4 個人,這樣每個人的手中就有 13 張牌。

              接下來的任務就是每個人把自己手中的牌按一定的順序整理好。理牌的順序如下:

              首先按牌的大小整理,牌的大小順序為:A,K,Q,J,T(10),9,…,2,如果牌的大小相等,則按如下的花色順序整理:黑桃(S),紅心(H),方塊(D),草花(C)。

              例如有一個人手中拿到的牌如下:

              ST CQ S8 D8 HQ D2 H3 HK H9 H2 HT SK CK

              經過整理后的牌的順序會變為:

              SK HK CK HQ CQ ST HT H9 S8 D8 H3 H2 D2

              其中 SK、HK、CK 這三張牌的大小相同,都是 K,于是根據花色的順序整理,先是 S,再是 H,最后是 C,所以順序為 SK、HK、CK。

              當每個人把自己手中的牌整理完后,他們就開始玩非常有趣的撲克游戲了。但是玩著玩著,他們發現了一個問題:理牌的時間太長,這使得他們玩牌的興致被大大減弱了。于是他們來求助于你,能否幫他們寫一個理牌程序,幫助他們理牌,這樣他們就可以不必把大量的時間花在理牌上面,而盡情享受玩牌的樂趣了。

              明明的問題可以歸結為:給你每人手中順序打亂的 13 張牌,一共有 4 套,然后通過題目中描述的理牌順序,理好這 4 套牌。

              輸入說明 :

              你寫的程序要求從標準輸入設備中讀入測試數據作為你所寫程序的輸入數據。標準輸入設備中有多組測試數據,測試數據的第一行有一個整數 n,表示有幾副牌需要整理,接著每副牌分四行輸入,每行 13 張牌;每張牌用兩個字母表示,首字母表示花色,尾字母表示點數,兩張牌之間有一個空格。每副牌與每副牌之間沒有任何空行,第一副牌前面以及最后一副牌后面也都沒有任何空行。 注:通常,鍵盤為標準輸入設備。

              輸出說明 :

              對于每一副牌,你寫的程序要求計算出一組相應的運算結果,并將每組運算結果作為你所寫程序的輸出數據依次寫入到標準輸出設備中。對于每組輸入的牌,輸出排序后的牌,分四行輸出,輸出樣式與輸入相同。每組運算結果與其后一組運算結果之間有一個空行,第一組運算結果前面及最后一組運算結果后面沒有空行。 注:通常,顯示屏為標準輸出設備。

              輸入范例 :

              2ST CQ S8 D8 HQ D2 H3 HK H9 H2 HT SK CKD9 HJ H7 DJ S2 SQ DT C2 H4 H5 DA D4 D5D6 S4 S9 S5 S7 SJ H8 D3 C8 S3 C4 S6 C9SA C7 HA H6 DK CJ D7 CA C5 CT DQ C6 C3D6 S4 S9 S5 S7 SJ H8 D3 C8 S3 C4 S6 C9D9 HJ H7 DJ S2 SQ DT C2 H4 H5 DA D4 D5ST CQ S8 D8 HQ D2 H3 HK H9 H2 HT SK CKSA C7 HA H6 DK CJ D7 CA C5 CT DQ C6 C3

              輸出范例 :

              SK HK CK HQ CQ ST HT H9 S8 D8 H3 H2 D2DA SQ HJ DJ DT D9 H7 H5 D5 H4 D4 S2 C2SJ S9 C9 H8 C8 S7 S6 D6 S5 S4 C4 S3 D3SA HA CA DK DQ CJ CT D7 C7 H6 C6 C5 C3SJ S9 C9 H8 C8 S7 S6 D6 S5 S4 C4 S3 D3DA SQ HJ DJ DT D9 H7 H5 D5 H4 D4 S2 C2SK HK CK HQ CQ ST HT H9 S8 D8 H3 H2 D2SA HA CA DK DQ CJ CT D7 C7 H6 C6 C5 C3

              解題思路

              使用 C 語言的庫函數 qsort,需要注意撲克牌的大小不完全是字典序

              A > K > Q > J > 9 > 8 > …… > 2;

              花色為字典序降序

              黑桃(S),紅心(H),方塊(D),草花(C)。

              參考代碼

              #include#include#include#include#include#include#define MAX_SIZE 13struct Poker{char color;  char num;};void input(struct Poker p[4][MAX_SIZE]);void output(struct Poker p[4][MAX_SIZE]);int cmp(const void *a, const void *b){struct Poker *c = (struct Poker *)a;  struct Poker *d = (struct Poker *)b;  if (c->num != d->num) //對牌號排序: A > K > Q > J    if ("A" <= c-="">num && c->num <= "Z" && "A" <= d-="">num && d->num <= if="" c-="">num == "Q" && d->num == "J" || c->num == "J" && d->num == "Q")        return d->num - c->num;      else if (c->num == "K" && d->num == "J" || c->num == "J" && d->num == "K")        return d->num - c->num;      else        return c->num - d->num;    else //字母排在數字后      return d->num - c->num;  else //數字相同,按顏色排序    return d->color - c->color;}int main(){int i, j, n;  struct Poker poker[4][MAX_SIZE];  scanf("%d", &n);  getchar();  for (i = 0; i < n; i++)  {input(poker);    for (j = 0; j < 4; j++)      qsort(poker[j], MAX_SIZE, sizeof(poker[j][0]), cmp);    output(poker);    if (n > 1)      putchar("\n");  }  return 0;}void input(struct Poker p[4][MAX_SIZE]){int i, j;  for (i = 0; i < 4; i++)  {for (j = 0; j < 13; j++)    {scanf("%c%c", &p[i][j].color, &p[i][j].num);      getchar();    }  }}void output(struct Poker p[4][MAX_SIZE]){int i, j;  for (i = 0; i < 4; i++)  {printf("%c%c", p[i][0].color, p[i][0].num);    for (j = 1; j < 13; j++)      printf(" %c%c", p[i][j].color, p[i][j].num);    putchar("\n");  }}

              責任編輯:

              標簽:

              相關推薦:

              精彩放送:

              新聞聚焦
              Top 中文字幕在线观看亚洲日韩