这里必须了解什么是十三幺,什么是九莲宝灯。
十三幺,由三种序数牌的1、9牌,七种字牌及其中一对作将牌组成的和牌。不计五门齐、门前清、单钓将、混幺九,自摸加计不求人。
十三幺必然是万、条、筒、风、箭五门齐全,按不重复原则不计五门齐。
九莲宝灯,由一种花色序数牌按1112345678999组成的特定牌型,不能吃、碰、杠牌,见同花色任何一张序数牌即成和牌。不计清一色、门前清、幺九刻,自摸加计不求人。
知道这一点就很好模拟了。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
map<string,int>mp;//记录这个字符串出现的次数
map<char,int>mp1;//记录三种牌型数字出现的次数
map<char,int>c;
int wo=0;
string m;
for(int i=0; i<14; i++)
{
cin>>m;
if(m[0]<='9'&&m[0]>='0')
{
mp1[m[0]]++;
if(mp[m]==0)
c[m[0]]++;//这个数有几个牌型
}//为三种牌型时
else
{
if(mp[m]==0)
wo++;//记录有几种花色
}//为七种花色时
mp[m]++;
}
if(wo>=7&&c['9']>=3&&c['1']>=3&&(wo>7||mp1['1']>3||mp1['9']>3))
cout<<"shisanyao!"<<endl;
else if(c['9']==1&&c['1']==1&&c['8']==1&&c['2']==1&&mp1['9']>=3&&mp1['1']>=3&&mp1['8']>=1&&mp1['2']>=1)
cout<<"jiulianbaodeng!"<<endl;
else
cout<<"I dont know!"<<endl;
}