九度-1363-欢乐斗地主[解题代码] | Acm之家
Read full article from 九度-1363-欢乐斗地主[解题代码] | Acm之家
- 如果大家玩过欢乐斗地主这个游戏,就一定知道有一个具有"提示"功能的按钮。如果你不知道你现在手里的牌有没有比上家大的牌,并且你也懒得去一张一张地看你手中的牌。这时候你就可以点"提示"按钮,系统会告诉你是否有这样的牌。如果你是一个喜欢挑战的人,你就一定会想,能不能写一个程序,让它实现欢乐斗地主中的"提示"按钮的功能。现在,我们把"提示"按钮所具有的功能简化,它只需要找出在上家出的牌是"三带一对"的情况下你手中的牌是否比上家的牌大。
- 输入:
- 每组测试数据可能有多组输入,对于每一组输入,输入的第一行包括一个整数N(1<=N<=18),代表你手中现在还剩下的扑克牌的张数。接下来的一行包括N个数字(1-13,分别代表扑克牌中的A-K),给你的这N个数字是无序的。接下来的一行包括五个数字,前三个数字是相同的,后两个数字是相同的,代表上家出的"三带一对"。
- 输出:
- 如果你手中的牌有比上家的"三带一对"大的,输出这样的牌,输出的格式与输入中的第三行相同,即五个数字:前三个是一样的,后两个是一样的,代表你手中的"三带一对"。如果你手中没有比上家的"三带一对"大的牌,请输出"My God"。
04 | int n,t; |
05 | int m,p; //上家 的出的牌 |
06 |
07 | while ( scanf ( "%d" ,&n) != EOF){ |
08 |
09 | int arr[16] = {0}; |
10 | for ( int i=0; i<n; i++){ |
11 | scanf ( "%d" ,&t); |
12 | if (t==1 || t==2) |
13 | t += 13; |
14 | arr[t] ++; |
15 | } |
16 | scanf ( "%d %d %d %d %d" ,&m,&m,&m,&p,&p); |
17 |
18 | if (m==1 || m==2) |
19 | m += 13; |
20 | int tag = 0; |
21 |
22 | for ( int i=m+1; i<=15; i++){ |
23 | if (tag == 1) |
24 | break ; |
25 | if (arr[i] >=3 ){ |
26 | for ( int j=3; j<=15; j++) |
27 | if (arr[j] >=2 && i!=j){ |
28 | tag = 1; |
29 | if (i==14 || i==15) |
30 | i -= 13; |
31 | if (j==14 || j==15) |
32 | j -= 13; |
33 | printf ( "%d %d %d %d %d\n" ,i,i,i,j,j); |
34 | break ; |
35 | } |
36 | } |
37 | } |
38 | if (tag == 0) |
39 | printf ( "My God\n" ); |
40 | } |