閱讀121 返回首頁    go 阿裏雲 go 技術社區[雲棲]


九度題目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

  上一篇:go 自定義actionbar
  下一篇:go Docker網絡詳解