Q170: Clock Patience
紙牌專家 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
|
import java.util.Scanner;
public class UVA_170 {
static String[][] puke=new String[5][13];
static int[] count;
static String answer;
static int run_time=0;
public static void main(String[] args) { //第一組的run_time好像有錯 以後再改
Scanner sc=new Scanner(System.in);
while(true){
String[][] puke2=new String[5][13];
for(int i=0;i<4;i++){
for(int j=0;j<13;j++){
puke2[i][j]=sc.next();
}
}
count=new int[13];
count[12]=1; //最一開始的第一張
run_time=1; //第一張翻了
puke=puke2;
String now=puke[3][12]; //K的最上面一張
Clock(now);
System.out.println(run_time+","+answer);
}
}
private static void Clock(String now){
//System.out.println(now+" "+run_time);
char s_point=now.charAt(0); //ex:3C
int point=p(s_point);
if(count[point]==4){
answer=now;
return;
}
puke[4][point]=now; //放到最後一張
count[point]++;
run_time++;
now=puke[0][point]; //換這張要翻起來
reset(point);
Clock(now);
}
private static void reset(int point){
for(int i=0;i<4;i++){
puke[i][point]=puke[i+1][point];
}
}
private static int p(char s_point){
switch(s_point){
case 'A':
return 0;
case '2':
return 1;
case '3':
return 2;
case '4':
return 3;
case '5':
return 4;
case '6':
return 5;
case '7':
return 6;
case '8':
return 7;
case '9':
return 8;
case 'T':
return 9;
case 'J':
return 10;
case 'Q':
return 11;
case 'K':
return 12;
}
return -1;
}
}
沒有留言:
張貼留言