题目
hzf 最近迷上 QQ 游戏欢乐斗牛。
斗牛的规则如下,游戏开始的时候,每位玩家发 张扑克牌,每张牌都是 A-K 中的一张牌( 表示 A, 表示对应的牌, -J, -Q, -K)。
每张牌都有一个点数, 分别对应其点数, 对应点数 。
牌型分为以下 种情况,牌型的优先级按照给定从上到下。
-
四炸—— 张牌中有 张牌相同 ,优先级最高。
-
五小牛——即五张牌点数都小于 ,且 张牌的点总数和小于或等于 ,优先级次之。
-
牛牛——其中 张牌的点数和是 的整数倍,另外 张牌的点数和是 的整数倍。
-
牛 ——其中 张牌的点数和是 的整数倍,另外 张牌的点数和对 取模为 。
-
以上情况都不是,就是无牛。
hzf 要根据自己的牌型来决定自己的下注的倍数,但是 hzf 总是不能看出他的牌型,你能写一个程序帮助他吗。
输入格式
一行输入 个空格隔开的整数。
输出格式
若牌型为四炸,输出一行quadra bomb orz
。
若为五小牛,输出一行penta calf
。
若为牛牛,输出一行you can you up
。
若为牛 x,输出一行too young too simple:calf x
。
若为无牛,输出一行gg
。
样例输入
10 10 10 1 1
样例输出
too young too simple:calf 2
样例输入
10 10 10 10 9
样例输出
quadra bomb orz
题解
先确定点数
再给点数排序
再四种情况一一实现:
- 四炸:由于已经排序,如果 a[0] = a[3],那中间 a[1] a[2] 肯定都相等,a[1] = a[4] 同理
- 五小牛:默认升序排列,如果 a[4] < 5,a[0]~a[3] 肯定也小于 5
- 牛牛:因为三张牌点数是 10 的整数倍,另外两张牌点数也是 10 的整数倍,所以和取余为 0,但是做除肯定不为 1
- 牛x:当三张牌点数是 10 的整数倍,剩余的两张牌的余数就是要输出的数
- 无牛:当上面情况全部都没有时
#include<iostream>
#include<algorithm>
using namespace std;
int a[5];
// 判断四炸
bool bomb(){
if(a[0] == a[3] || a[1] == a[4]){
cout<<"quadra bomb orz";
return true;
}
return false;
}
// 判断五小牛
bool penta(){
if(a[4] < 5 && a[0]+a[1]+a[2]+a[3]+a[4]<=10){
cout<<"penta calf";
return true;
}
return false;
}
// 判断牛牛
bool niuniu(){
if((a[0]+a[1]+a[2]+a[3]+a[4])%10==0 && (a[0]+a[1]+a[2]+a[3]+a[4])/10!=1){
cout<<"you can you up";
return true;
}
return false;
}
// 判断牛x
bool niux(){
for(int i=0;i<5;i++)
for(int j=i+1;j<5;j++)
for(int k=j+1;k<5;k++){
if((a[i]+a[j]+a[k])%10 == 0){
int sum = 0;
for(int w=0;w<5;w++)
if(w!=i && w!=j && w!=k)
sum += a[w];
cout<<"too young too simple:calf "<<sum%10;
return true;
}
}
return false;
}
int main(){
for(int i=0;i<5;i++){
cin>>a[i];
if(a[i] > 10)
a[i] = 10;
}
sort(a,a+5);
if(!bomb() && !penta() && !niuniu() && !niux()){
cout<<"gg";
}
return 0;
}