九度題目1363:歡樂鬥地主
歡樂鬥地主時間限製:1 秒內存限製:32 兆特殊判題:否提交:727解決:163
題目描述:
如果大家玩過歡樂鬥地主這個遊戲,就一定知道有一個具有“提示”功能的按鈕。如果你不知道你現在手
裏的牌有沒有比上家大的牌,並且你也懶得去一張一張地看你手中的牌。這時候你就可以點“提示”按鈕,係
統會告訴你是否有這樣的牌。
如果你是一個喜歡挑戰的人,你就一定會想,能不能寫一個程序,讓它實現歡樂鬥地主中的“提示”
按鈕的功能。
現在,我們把“提示”按鈕所具有的功能簡化,它隻需要找出在上家出的牌是“三帶一對”的情況下
你手中的牌是否比上家的牌大。
輸入:
每組測試數據可能有多組輸入,對於每一組輸入,
輸入的第一行包括一個整數N(1=N=18),代表你手中現在還剩下的撲克牌的張數。
接下來的一行包括N個數字(1-13,分別代表撲克牌中的A-K),給你的這N個數字是無序的。
接下來的一行包括五個數字,前三個數字是相同的,後兩個數字是相同的,代表上家出的“三帶一對
”。
輸出:
如果你手中的牌有比上家的“三帶一對”大的,輸出這樣的牌,輸出的格式與輸入中的第三行相同,
即五個數字:前三個是一樣的,後兩個是一樣的,代表你手中的“三帶一對”。如果你手中沒有比上家的“三
帶一對”大的牌,請輸出“My God”。
8
1 6 4 8 4 7 6 4
3 3 3 9 9
8
1 6 4 8 4 7 6 4
8 8 8 2 2
樣例輸出:
4 4 4 6 6
My God
提示:
1.“三帶一對”:三張同樣數字的牌+兩張同樣數字的牌,此時這五張牌可以同時出。“三帶一對”
比大小的規則如下——隻需要比較三張同樣數字的牌的數字的大小,而不需要考慮兩張同樣數字的牌的數字的
大小。比如:“三個5帶兩個3”,比“三個4帶兩個8”要大。
2.大家都知道,在撲克牌中A和2要比3-K都要大,請大家在程序中進行處理。
3.如果你手中的牌有多種出法能夠比上家的“三帶一對”大,你需要選擇“三帶一對”中三張相同的牌數字較
小的那種出法。比如說,如果上家出的牌是3 3 3 4 4,而你現在手中有6 6 6 7 7 7這6張牌,你需要出的牌是
6 6 6 7 7,而不是7 7 7 6 6,如果三帶最小的有多個,則需要輸出一對值最小的那個結果。
4.你可以放心,我們發的牌以及出的牌中不會出現大小王。
AC代碼:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[20],flag[20]; int b[10]; int main() { int i,j,n,x,y,f1,f2; while(scanf("%d",&n)!=EOF) { memset(flag,0,sizeof(flag)); memset(a,0,sizeof(a)); for(i=0;i<n;i++) { scanf("%d",&a[i]); if(a[i]==1) a[i]=14; if(a[i]==2) a[i]=15; } sort(a,a+n); for(i=0;i<5;i++) { scanf("%d",&b[i]); if(b[i]==1) b[i]=14; if(b[i]==2) b[i]=15; } x=b[0],y=b[4]; f1=0;f2=0; for(i=0;i<n;i++) { if(a[i]>x&&i+2<n) { if(a[i]==a[i+1]&&a[i+1]==a[i+2]&&a[i+2]>x) { f1=a[i]; flag[i]=1; flag[i+1]=1; flag[i+2]=1; break; } } } for(i=0;i<n;i++) { if(flag[i]==0&&i+1<n) { if(a[i]==a[i+1]) { f2=a[i]; break; } } } if(f1==14) f1=1; if(f1==15) f1=2; if(f2==14) f2=1; if(f2==15) f2=2; if(f1!=0&&f2!=0) printf("%d %d %d %d %d\n",f1,f1,f1,f2,f2); else printf("My God\n"); } return 0; }
最後更新:2017-04-03 12:56:41