九度题目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;
}
时间: 2024-08-29 05:48:39

九度题目1363:欢乐斗地主的相关文章

九度题目1120:全排列

题目1120:全排列  时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2749 解决:669 题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列. 输入: 输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间. 输出: 输出这个字符串的所有排列方式,每行一个排列.要求字母序比较小的排列在前

九度题目1110:小白鼠排队

题目1110:小白鼠排队 时间限制:1 秒内存限制:32 兆特殊判题:否提交:1348解决:820 题目描述: N只小白鼠(1 <= N <= 100),每只鼠头上戴着一顶有颜色的帽子.现在称出每只白鼠的重量,要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色.帽子的颜色用"red","blue"等字符串来表示.不同的小白鼠可以戴相同颜色的帽子.白鼠的重量用整数表示. 输入: 多案例输入,每个案例的输入第一行为一个整数N,表示小白鼠的数目. 下面有N行

九度题目1188:约瑟夫环

题目1188:约瑟夫环 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1500 解决:665 题目描述:     N个人围成一圈顺序编号,从1号开始按1.2.3......顺序报数,报p者退出圈外,其余的 人再从1.2.3开始报数,报p的人再退出圈外,以此类推.     请按退出顺序输出每个退出人的原序号. 输入: 包括一个整数N(1<=N<=3000)及一个整数p. 输出: 测试数据可能有多组,对于每一组数据, 按退出顺序输出每个退出人的原序号. 样例输入: 7 3 样例输出:

九度题目1008:最短路径问题

题目1008:最短路径问题 时间限制:1 秒内存限制:32 兆特殊判题:否提交:5129解决:1634 题目描述: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花 费,如果最短距离有多条路线,则输出花费最少的. 输入: 输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p. 最后一行是两个数 s,t;起点s,终点t.n和m为0时输入结束. (1n=1000, 0m100000,

九度题目1009:二叉搜索树

题目1009:二叉搜索树 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4308 解决:1919 题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树. 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树. 输出: 如果序列相同则输出YES

九度题目1201:二叉排序树

题目1201:二叉排序树 时间限制:1 秒内存限制:32 兆特殊判题:否提交:3008解决:1262 题目描述:     输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历. 输入:     输入第一行包括一个整数n(1=n=100).     接下来的一行包括n个整数. 输出:     可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序.中序和后序遍历.     每种遍历结果输出一行.每行最后一个数据之后有一个空格. 样例输入: 5 1 6 5

九度题目1027:欧拉回路

题目1027:欧拉回路 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2344解决:1157 题目描述:     欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? 输入:     测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M:随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号).当N为0时输入结束. 输出:

九度题目1153:括号匹配问题

题目1153:括号匹配问题 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2965 解决:1315 题目描述:     在某个字符串(长度不超过100)中有左括号.右括号和大小写字母:规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右 边且距离最近的右括号匹配.写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号.不能匹配的 左括号用"$"标注,不能匹配的右括号用"?"标注. 输入:     输入包括多组数据,

九度题目1209:最小邮票数

题目1209:最小邮票数  时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1680 解决:558 题目描述:     有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值.     如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分.3分.4分即可. 输入:     有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M100.然后是一个数N,N〈20,表示有N张邮票.接下来是N个正整数,分别表 示这N张邮票的面值,且以升序排列. 输出: