60 發牌
作者: 朱星垠時間限制: 2S章節: 二維數組
問題描述 :
編制一個模擬發牌的程序。有編號爲1,2,3,4四個人,將一付去掉大小怪的撲克按照如下順序排列梅花c0-c12,方塊d0-d12,紅桃h0–h12,黑桃s0-s12,然後按照1,2,3,4四個人的順序發牌,問最後每個人手上的牌有哪些。
輸入說明 :
你的程序需要從標準輸入設備(通常爲鍵盤)中讀入多組測試數據。每組輸入數據由一行組成。每組數據包含一個在1到4之間的整數,代表四個人中的一個,在行首和行尾沒有多餘的空格。
輸出說明 :
對每組測試數據,你的程序需要向標準輸出設備(通常爲啓動該程序的終端)依次輸出一組對應的答案。對於每組輸入,輸出那個人手上的牌。每組一行。每行包括13張牌,每張牌由牌的花色和牌的大小組成。牌的花色和牌的大小之間有一個空格,前後兩張牌之間也有一個空格。其餘數據前後沒有多餘的空格,兩組數據之間也沒有多餘的空行。
輸入範例 :
1
2
輸出範例 :
c 0 c 4 c 8 c 12 d 3 d 7 d 11 h 2 h 6 h 10 s 1 s 5 s 9
c 1 c 5 c 9 d 0 d 4 d 8 d 12 h 3 h 7 h 11 s 2 s 6 s 10
代碼:
/*
T60 發牌
算法概述:由於發給每個人的牌的規律是一樣的:都是隔4次發一張。
所以可以用num表示牌的數字,直接輸出發的牌的花色和編號,輸出一次
將num累加4,若num超過12,那麼說明需要發下一種花色的牌了,這個時
候num%13,花色更新一下就可以了,總共輸出十三次
*/
#include<stdio.h>
int main() {
int i = 0;// 統計已發的牌張數
int num = 0;// 當前牌的數字
int count = 0;// 統計換花色的次數
int perNum = 0;// 人員編號
char patterns[5] = "cdhsc";
char ch = patterns[count];// 當前牌的花色
while (scanf("%d", &perNum) != EOF) {
// 重置數據
i = 0;
num = perNum - 1;
count = 0;
ch = patterns[count];
printf("c %d", num);
i++;
while (i < 13) {
num += 4;
if (num > 12) {
num %= 13;
ch = patterns[++count];// 換花色
printf(" %c %d", ch, num);
}
else {
printf(" %c %d", ch, num);
}
i++;
}
printf("\n");
}
return 0;
}