题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3671
Mahjong is a game of skill, strategy and calculation and involves a certain degree of chance. In this problem, we concentrate on Japanese Mahjong, a variation of mahjong. For brief, all of the word mahjong mentioned following refer to Japanese Mahjong.
Japanese mahjong is usually played with 136 tiles, which can be organized into several categories:
In this problem, we introduce two abnormal kinds of winning hand different from the normal winning hand, which consist of four melds and one eyes.
Now, given a hand with 14 tiles, can you answer this hand is which kind of abnormal kind of winning hand?
There are multiple cases. Each case consists of 28 characters in one line, describing 14 tiles. The manner for describing each type of tile is:
For each case, if the hand is Seven Pairs, output "Seven Pairs". If the hand is Thirteen Orphans, output "Thirteen Orphans". If the hand is neither Seven Pairs nor Thirteen Orphans, output "Neither!".
1z1z2z2z3z3z4z4z5z5z6z6z7z7z 1s9s1m9m1p9p1z2z3z4z5z6z7z7z 1s9s1m9m1p9p1z2z3z4z5z6z7z7p
Seven Pairs Thirteen Orphans Neither!
一道简单的模拟题。我们可以用一个二维数组 a[i][j] 来记录状态。a[0][j] 表示 jp a[1][j]表示 js, a[2][j] 表示 jm ,a[3][j] 表示 jz 。
#include<iostream> #include<cstring> #include<cstdio> #include<vector> #include<string> #include<sstream> #include<algorithm> #include<cmath> #include<vector> #include<set> #include<cstdlib> #include<map> using namespace std; #define CLR(A) memset(A,0,sizeof(A)) const int MAX=50; int a[10][10]; char str[MAX]; int main(){ while(~scanf("%s",str)){ CLR(a);int len=strlen(str); for(int i=0;i<len-1;i++){ if(str[i+1]=='p') a[0][str[i]-'0']++; if(str[i+1]=='s') a[1][str[i]-'0']++; if(str[i+1]=='m') a[2][str[i]-'0']++; if(str[i+1]=='z') a[3][str[i]-'0']++; } bool flag=0; for(int i=0;i<4;i++){ for(int j=1;j<10;j++){ if(a[i][j]&&a[i][j]!=2){ flag=1;break; } } if(flag) break; } if(!flag) cout<<"Seven Pairs"<<endl; else{ if(a[0][1]&&a[0][9]&&a[1][1]&&a[1][9]&&a[2][1]&&a[2][9]&&a[3][1]&&a[3][2]&&a[3][3]&&a[3][4]&&a[3][5]&&a[3][6]&&a[3][7]){ if(a[0][1]==2||a[0][9]==2||a[1][1]==2||a[1][9]==2||a[2][1]==2||a[2][9]==2||a[3][1]==2||a[3][2]==2||a[3][3]==2||a[3][4]==2||a[3][5]==2||a[3][6]==2||a[3][7]==2){ cout<<"Thirteen Orphans"<<endl; } else cout<<"Neither!"<<endl; } else cout<<"Neither!"<<endl; } } return 0; }
原文:http://blog.csdn.net/asdfghjkl1993/article/details/38852823