时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:770
解决:175
-
题目描述:
-
如果大家玩过欢乐斗地主这个游戏,就一定知道有一个具有“提示”功能的按钮。如果你不知道你现在手里的牌有没有比上家大的牌,并且你也懒得去一张一张地看你手中的牌。这时候你就可以点“提示”按钮,系统会告诉你是否有这样的牌。
如果你是一个喜欢挑战的人,你就一定会想,能不能写一个程序,让它实现欢乐斗地主中的“提示”按钮的功能。
现在,我们把“提示”按钮所具有的功能简化,它只需要找出在上家出的牌是“三带一对”的情况下你手中的牌是否比上家的牌大。
-
输入:
-
每组测试数据可能有多组输入,对于每一组输入,
输入的第一行包括一个整数N(1<=N<=18),代表你手中现在还剩下的扑克牌的张数。
接下来的一行包括N个数字(1-13,分别代表扑克牌中的A-K),给你的这N个数字是无序的。
接下来的一行包括五个数字,前三个数字是相同的,后两个数字是相同的,代表上家出的“三带一对”。
-
输出:
-
如果你手中的牌有比上家的“三带一对”大的,输出这样的牌,输出的格式与输入中的第三行相同,即五个数字:前三个是一样的,后两个是一样的,代表你手中的“三带一对”。如果你手中没有比上家的“三带一对”大的牌,请输出“My God”。
-
样例输入:
-
81 6 4 8 4 7 6 43 3 3 9 981 6 4 8 4 7 6 48 8 8 2 2
-
样例输出:
-
4 4 4 6 6My 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.你可以放心,我们发的牌以及出的牌中不会出现大小王。
#include<string.h>
#include<stdio.h>
int a[20];
int b[5];
int flag[20];
void i_sort(int a[],int n){
for(int i=1;i<n;++i){
int value=a[i];
int j=i-1;
while(j>=0&&a[j]>value)
{
a[j+1]=a[j];
j--;
}
a[j+1]=value;
}
}
int main(int argc, char *argv[])
{
int N;
while(~scanf("%d",&N))
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(flag,0,sizeof(flag));
for(int i=0;i<N;++i)
{
scanf("%d",&a[i]);
if(a[i]==1)a[i]=14;
if(a[i]==2)a[i]=15;
}
i_sort(a,N);
for(int i=0;i<5;++i)
{
scanf("%d",&b[i]);
if(b[i]==1)b[i]=14;
if(b[i]==2)b[i]=15;
}
int f1=0;
int f2=0;
for(int i=0;i<=N-3;++i){
if(a[i]>b[0]&&a[i]==a[i+1]&&a[i]==a[i+2])
{
flag[i]=flag[i+1]=flag[i+2]=1;
f1=a[i];
break;
}
}
for(int i=0;i<=N-2;++i)
{
if(flag[i]==0&&a[i]==a[i+1]){
f2=a[i];
break;
}
}
if(f1!=0&&f2!=0)
{
if(f1==14)f1=1;
if(f1==15)f1=2;
if(f2==14)f2=1;
if(f2==15)f2=2;
printf("%d %d %d %d %d\n",f1,f1,f1,f2,f2);
}
else
printf("My God\n");
}
return 0;
}