close

紙牌專家 Albert Smith正在寫一本關於紙牌遊戲的書。為了重複確認書中的例子,他正在寫程式來找出一副牌的最佳玩法。其中一種叫做「時鐘」紙牌的描述如下:紙牌被發出 去(面朝下)成為一個時鐘的樣式,每個小時的位置有一堆紙牌,然後在中心也有額外的一堆(總共13堆,這13堆的名字分別為A, 2, 3, ..., T, J, Q,K。見下圖)。發牌的順序為先發一點鐘的牌(面朝下),然後二點鐘的牌,依此發牌到十二點鐘,最後發時鐘中心的牌。如此重複4圈,也就是說一副牌有 52張,依此方法發牌,這13堆牌每堆會有4張牌。

遊戲開始的時候,K堆的最上面一張牌被翻開變成目前牌,然後看這張牌的點數,將這張牌移到相對的那堆牌最下面(面朝上),然後翻開這堆牌的最上方一 張牌成為目前牌。例如:如果目前牌的點數是J,那這牌就被移到J堆牌的最下面,然後翻開J堆牌的最上方那張牌成為目前牌。遊戲如此不斷下去直到要翻牌的時 候發現那堆牌已經沒有面朝下的牌了,這時候遊戲結束。如果所有的牌都被翻開,那表示你的運氣真的太好了!

你的任務是寫一個程式讀入一堆牌,然後模擬這個遊戲。

Input

輸入包含多組測試資料。每組測試資料4列,每列有13張牌的資料。每張牌以2個字元代表。第一個字元代表牌的點數(A=Ace, 2~9, T=10, J=Jack, Q=Queen, K=King),第二個字元代表牌的花色(C=Clubs, D=Diamonds, H=Hearts, S=Spades)

若遇到僅含#的一列代表輸入結束。請參考Sample Input。

Output

對每組測試資料輸出遊戲結束時總共翻開多少張牌(2位數,必要時在前面加0),以及最後被翻開的那張牌。輸出格式請參考Sample Output。

 

Sample Input Sample Output
TS QC 8S 8D QH 2D 3H KH 9H 2H TH KS KC
9D JH 7H JD 2S QS TD 2C 4H 5H AD 4D 5D
6D 4S 9S 5S 7S JS 8H 3D 8C 3S 4C 6S 9C
AS 7C AH 6H KD JC 7D AC 5C TC QD 6C 3C
6D 4S 9S 5S 7S JS 8H 3D 8C 3S 4C 6S 9C
9D JH 7H JD 2S QS TD 2C 4H 5H AD 4D 5D
TS QC 8S 8D QH 2D 3H KH 9H 2H TH KS KC
AS 7C AH 6H KD JC 7D AC 5C TC QD 6C 3C
#
44,KD
42,KC

 

 


 

也是輕鬆解決的一題

但是中譯題目有瑕疵,Sample Input 裡面給的資料是【反過來的】

也就是,第一組 Sample Input 的情況,第 K 組牌翻開的次序應該是 TS 9D 6D AS

直接看中文翻譯的話一定會把輸入順序整個搞反

其他部分就沒什麼問題了

Ranking 有 63,還不賴,只花了 1.5 個小時左右

 


 

#include <stdio.h>
#include <stdlib.h>

struct Card_Style
{
int number;
char style;
};


int main()
{
char Ctmp;
int Itmp;
struct Card_Style Card[13][4];
int Card_Index[13],i,j,Open_Counter = 0;
int Round_Index = 13;

for(i=0;i<13;i++)
{
Card_Index[i] = 4;
}

while(scanf("%c",&Ctmp)==1)
{
if(Ctmp == '#') break;
else if(Ctmp >= '2' && Ctmp <= '9')
{
Round_Index--;
Card_Index[Round_Index]--;

Card[Round_Index][Card_Index[Round_Index]].number = Ctmp - '0';

scanf("%c",&Ctmp);

Card[Round_Index][Card_Index[Round_Index]].style = Ctmp;
}
else if(Ctmp >= 'A')
{
Round_Index--;
Card_Index[Round_Index]--;

if(Ctmp == 'T')
Card[Round_Index][Card_Index[Round_Index]].number = 10;
else if(Ctmp == 'J')
Card[Round_Index][Card_Index[Round_Index]].number = 11;
else if(Ctmp == 'Q')
Card[Round_Index][Card_Index[Round_Index]].number = 12;
else if(Ctmp == 'K')
Card[Round_Index][Card_Index[Round_Index]].number = 13;
else if(Ctmp == 'A')
Card[Round_Index][Card_Index[Round_Index]].number = 1;

scanf("%c",&Ctmp);
Card[Round_Index][Card_Index[Round_Index]].style = Ctmp;
}
else
{
continue;
}

if(Round_Index == 0)
{
if(Card_Index[0] != 0)
{
Round_Index = 13;
}
else
{
Round_Index = 12;

for(i=0;i<13;i++)
{
Card_Index[i] = 4;
}

while(Card_Index[Round_Index] != 0)
{

j = --Card_Index[Round_Index];


i= Round_Index;
Itmp = Round_Index;

Round_Index = Card[Itmp][j].number - 1 ;
Open_Counter++;
}

if(Card[i][j].number > 9 || Card[i][j].number < 2)
{
if(Card[i][j].number == 10)
Ctmp = 'T';
else if(Card[i][j].number == 11)
Ctmp = 'J';
else if(Card[i][j].number == 12)
Ctmp = 'Q';
else if(Card[i][j].number == 13)
Ctmp = 'K';
else if(Card[i][j].number == 1)
Ctmp = 'A';
}
else
{
Ctmp = '0' + Card[i][j].number;
}
if(Open_Counter < 10) printf("0");
printf("%d,%c%c\n",Open_Counter,Ctmp,Card[i][j].style);

Round_Index = 13;
Open_Counter = 0;

for(i=0;i<13;i++)
{
Card_Index[i] = 4;
}
}
}
}
return 0;
}

全站熱搜
創作者介紹
創作者 HydraSmith 的頭像
HydraSmith

Hydra Smith

HydraSmith 發表在 痞客邦 留言(0) 人氣()