XidianOJ 1044 炸金花
Posted TOTOTOTOTZZZZZ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XidianOJ 1044 炸金花相关的知识,希望对你有一定的参考价值。
题目描述
炸金花是一个风靡全球的扑克游戏,不少人因为这个游戏发了家,而更多的人则输得倾家荡产。为了帮助赌徒们戒掉它,现在决定派你去写一个程序,帮助赌徒们更好的认识这个游戏。
炸金花在这里被简化成这样一个情况:每一个人都会得到随机派发的三张牌(每张牌的点数为整数区间[1,9]中的某个数,点数相同的牌最多只有4张),然后比较大小。
比较大小的方式是这样的:
① 豹子:即三张点数一样的牌,若双方都为豹子,则点数大者为大,豹子大于任何其他情况;
② 顺子:即三张点数连续递增的牌,比如(4,5,6),(1,2,3),若双方都是顺子,点数大者为大,顺子大于对子和单张;
③ 对子:即两张点数一样的牌带一张单牌,比如(1,1,4),(2,2,5),若双方都是对子,则成对的牌点数大者为大,如果那一对也一样,则比较单张的大小,对子大于单张;
④ 单张:即三张牌不是上述的三种。单张的比较大小方式是,先比较点数最大的,再比较点数第二大的,再比较点数第三大的。
需要注意的是一个特殊情况,那就是,2,3,5比大部分牌都小,但是比豹子大。
你的任务是,对于对手的给定的一种情况,告诉赌徒,有多少种情况可以赢对方。(4,5,6及5,4,6这样算一种情况)
输入
有多组输入数据,第一行为一个数字T,代表有T组输入数据 (0<T≤1000)。
接下来为T组数据,每组数据占一行,为3个整数,表示对手的拿牌情况。
输出
对于每组数据,在一行上输出一个整数,表示赢得对手的情况数。
--正文
直接一种种情况考虑过去就好
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; int card[4]; int danzhang[10] = {0,0,0,0,2,5,9,14,20,27}; long long ans = 0; bool cmp(int a,int b){ return (a <= b); } void Solve(){ ans = 0; sort(card+1,card+4,cmp); if (card[1] == card[2]) { if (card[2] == card[3]){ // baozi ans = (9 - card[1]) + 1; } else { //duizi int tmp1 = (9-card[3]) + 8*(9-card[1]); // duizi bi ta da int tmp2 = 7; // shunzi int tmp3 = 8; // baozi ans = tmp1 + tmp2 + tmp3; } } else { if (card[2] == card[3]){ //duizi int tmp1 = (9-card[1]) + 8*(9-card[3]); // tongshang int tmp2 = 7; int tmp3 = 8; ans = tmp1 + tmp2 + tmp3; } else { if (card[2] == card[1] + 1 && card[3] == card[2] + 1){ //shunzi int tmp1 = 7 - card[1]; // shunzi int tmp2 = 9; ans = tmp1 + tmp2; } else { //danzhang int tmp1 = 0,i; if (card[2] == card[3] - 1){ tmp1 = card[2] - card[1] - 2; } else tmp1 = card[2] - card[1] - 1; for (i=card[2]+1;i<card[3]-1;i++){ tmp1 += i - 1; } if (card[2] < card[3] - 1) tmp1 += card[3] - 3; for (i=card[3]+1;i<=9;i++){ tmp1 += danzhang[i]; } int tmp2 = 72 ; // duizi int tmp3 = 7; // shunzi int tmp4 = 9; // baozi ans = tmp1 + tmp2 + tmp3 + tmp4; } } } } int main(){ int time,T; scanf("%d",&T); for (time=1;time<=T;time++){ scanf("%d %d %d",&card[1],&card[2],&card[3]); //printf("%d %d %d",card[0],card[1],card[2]); Solve(); printf("%lld\n",ans); } return 0; }
以上是关于XidianOJ 1044 炸金花的主要内容,如果未能解决你的问题,请参考以下文章