题目描述:

如果大家玩过欢乐斗地主这个游戏,就一定知道有一个具有“提示”功能的按钮。如果你不知道你现在手里的牌有没有比上家大的牌,并且你也懒得去一张一张地看你手中的牌。这时候你就可以点“提示”按钮,系统会告诉你是否有这样的牌。

如果你是一个喜欢挑战的人,你就一定会想,能不能写一个程序,让它实现欢乐斗地主中的“提示”按钮的功能。

现在,我们把“提示”按钮所具有的功能简化,它只需要找出在上家出的牌是“三带一对”的情况下你手中的牌是否比上家的牌大。

输入:

每组测试数据可能有多组输入,对于每一组输入,

输入的第一行包括一个整数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.你可以放心,我们发的牌以及出的牌中不会出现大小王。

一开始的代码是这样

 #include <cstdio>
#include <cstring>
#include <algorithm> int card[];
int base[];
int n;
int num[] = {,,,,,,,,,,,,,};
int card2[];
int card3[]; int cmp(const void *a , const void *b) {
int at = *(int *)a;
int bt = *(int *)b;
return num[at] - num[bt];
}
int main(int argc, char const *argv[])
{
while(scanf("%d",&n) != EOF) {
for(int i = ; i < n; i++) {
scanf("%d",&card[i]);
}
for(int i = ; i < ; i++) {
scanf("%d",&base[i]);
}
qsort(card, n, sizeof(int), cmp);
int i = ;
int p2 = , p3 = ;
while(i < n) {
int cnt = ;
while(card[i] == card[i-]) {
cnt++;
i++;
}
if(cnt == ) {
card2[p2++] = card[i-];
}
else if(cnt == ) {
card3[p3++] = card[i-];
card2[p2++] = card[i-];
}
i++;
}
int t3 = -;
for(int j = ; j < p3; j++) {
if(num[card3[j]] > num[base[]]) {
t3 = card3[j];
break;
}
}
if(t3 == -) {
puts("My God");
continue;
}
int t2 = -;
for(int j = ; j < p2; j++) {
if(card2[j] != t3) {
t2 = card2[j];
break;
}
}
if(t2 == -) {
puts("My God");
continue;
}
printf("%d %d %d %d %d\n",t3,t3,t3,t2,t2);
}
return ;
}

居然一个例子都没通过。

这段代码的两个问题,38行,cnt==4时没处理

31行,没判断i < n

修改如下

 #include <cstdio>
#include <cstring>
#include <algorithm> int card[];
int base[];
int n;
int num[] = {,,,,,,,,,,,,,};
int card2[];
int card3[]; int cmp(const void *a , const void *b) {
int at = *(int *)a;
int bt = *(int *)b;
return num[at] - num[bt];
}
int main(int argc, char const *argv[])
{
while(scanf("%d",&n) != EOF) {
for(int i = ; i < n; i++) {
scanf("%d",&card[i]);
}
for(int i = ; i < ; i++) {
scanf("%d",&base[i]);
}
qsort(card, n, sizeof(int), cmp); /*for(int i = 0; i < n; i++) {
printf("%d ",card[i]);
}
puts("");*/
int i = ;
int p2 = , p3 = ;
while(i < n) {
int cnt = ;
while(i < n && card[i] == card[i-]) {
cnt++;
i++;
}
if(cnt >= ) {
card3[p3++] = card[i-];
card2[p2++] = card[i-];
}
else if(cnt >= ) {
card2[p2++] = card[i-];
}
i++;
}
int t3 = -;
for(int j = ; j < p3; j++) {
if(num[card3[j]] > num[base[]]) {
t3 = card3[j];
break;
}
}
if(t3 == -) {
puts("My God");
continue;
}
int t2 = -;
for(int j = ; j < p2; j++) {
if(card2[j] != t3) {
t2 = card2[j];
break;
}
}
if(t2 == -) {
puts("My God");
continue;
}
printf("%d %d %d %d %d\n",t3,t3,t3,t2,t2);
}
return ;
}

当然,也可以换一种思路

 #include <cstdio>
#include <cstring> int card[];
int num[] = {,,,,,,,,,,,,,,,};
int fnum[] = {,,,,,,,,,,,,,};
int n;
int m, p;
int main(int argc, char const *argv[])
{
while(scanf("%d",&n) != EOF) {
memset(card,,sizeof(card));
while(n--) {
int tmp;
scanf("%d",&tmp);
card[tmp]++;
}
scanf("%d %d %d %d %d",&m,&m,&m,&p,&p);
bool isFind = false;
for(int i = fnum[m]+; i <= && !isFind; i++) {
if(card[num[i]] >= ) {
for(int j = ; j <= && !isFind; j++) {
if(card[num[j]] >= && j != i) {
int t1 = num[i], t2 = num[j];
printf("%d %d %d %d %d\n",t1,t1,t1,t2,t2);
isFind = true;
}
}
}
}
if(!isFind) {
puts("My God");
}
}
return ;
}

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

  1. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  2. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  3. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  4. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  5. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  6. 九度OJ题目1105:字符串的反码

    tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...

  7. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  8. 九度oj题目1002:Grading

    //不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...

  9. 九度OJ题目1003:A+B

    while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...

随机推荐

  1. SqlServer中生成一串连续数字

    在SQLServer中一串连续数字,如1,2,3,4,5,....或者 1 2 3 4 5 没有现成方法,网上都用通用表表达式递归生成.今天想到一个还算简单的方法,记录下来: select row_n ...

  2. pc端常见布局---水平居中布局 单元素不定宽度

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. HDU 4283 You Are the One (区间DP,经典)

    题意: 某校举行一场非诚勿扰,给定一个出场序列,表示n个人的屌丝值,如果他是第k个出场的,他的不满意度为(k-1)*diao[i].为了让所有人的屌丝值之和更小,导演设置一个栈,可以将部分人装进栈中, ...

  4. JavaScript对象属性

    JavaScript对象的属性有两类:数据属性和访问器属性 数据属性 数据属性有四个特性,分别为: [[value]]属性的值 [[writeable]]属性是否可以修改 [[enumerable]] ...

  5. [学习总结] python语言学习总结 (一)

    还是不多说话了.. 1.eval函数 用法:eval(expression, globals=None, locals=None) 解释:将字符串str当成有效的表达式来求值并返回计算结果. 就是可以 ...

  6. ubuntu开放端口

    1.安装iptables(一般情况,ubuntu安装好的时候,iptables会被安装上),使用以下命令: $apt-get update $apt-get install iptables 2.安装 ...

  7. Problem D: 小平查密码

    Problem D: 小平查密码 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 194  Solved: 40[Submit][Status][Web ...

  8. C10 C语言数据结构

    目录 枚举 结构体 共用体 枚举 enum enum枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读. 枚举语法定义格式为: enum 枚举名 {枚举元素1,枚举元素2,……}; 枚举 ...

  9. windbg双机调试配置

    环境 虚拟机 win7 Pro x86 vmware 12 windbg x86 虚拟机win7配置 管理员权限运行cmd.exe 然后输入以下命令: bcdedit /? bcdedit /enum ...

  10. Bootstrap历练实例:标签修饰

    您可以使用修饰的 class label-default.label-primary.label-success.label-info.label-warning.label-danger 来改变标签 ...