题目描述:

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

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

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

输入:

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

输入的第一行包括一个整数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 ;
}

最新文章

  1. linq语法大全(转集)
  2. 通过GP加载卫星云图-雷达图-降雨预报图
  3. Navicat 回复 psc 文件 Mysql
  4. try---catch异常处理
  5. 利用js轻松实现页面简繁体转换
  6. RouterOS软路由常用命令
  7. 【转】IoC/DIP其实是一种管理思想
  8. js之Function原型
  9. UVaLive 6802 Turtle Graphics (水题,模拟)
  10. C++:位操作基础篇之位操作全面总结
  11. Best Practice API
  12. pyqt pyside QLineEdit 重写键盘事件
  13. poj12482 扫描线+lazy-tag
  14. 【LeetCode】Binary Tree Upside Down
  15. 邮件服务端口 port 25、109、110、143、465、995、993
  16. UNP学习总结(二)
  17. pythonl练习笔记——python线程的GIL
  18. [转]Working with Transactions (EF6 Onwards)
  19. jmete察看结果树和body data乱码问题的解决办法
  20. hdu 5167(dfs)

热门文章

  1. [windows]窗口文件夹中使用常见任务
  2. 协议详解3——IP
  3. 设置DataGridView单元格的文本对齐方式
  4. 2018.4.19 远程服务器重装系统之后ssh无法登陆问题
  5. CPP-STL:vector中的size和capacity
  6. linux - mysql 安装教程
  7. 基于arcgis api for js高速公路智能化智慧公路养护WebGIS开源系统
  8. virtualvenv+django+uWSGI+nginx 部署 踩坑记录
  9. Neural Style论文笔记+源码解析
  10. [vijos]P1514 天才的记忆