算法-程序设计课week2---C:POJ - 1786

Angie ·
更新时间:2024-11-15
· 741 次阅读

牌局由四个人构成,围成一圈。我们称四个方向为北 东 南 西。对应的英文是North,East,South,West。游戏一共由一副扑克,也就是52张构成。开始,我们指定一位发牌员(东南西北中的一个,用英文首字母标识)开始发牌,发牌顺序为顺时针,发牌员第一个不发自己,而是发他的下一个人(顺时针的下一个人)。这样,每个人都会拿到13张牌。
现在我们定义牌的顺序,首先,花色是(梅花)<(方片)<(黑桃)<(红桃),(输入时,我们用C,D,S,H分别表示梅花,方片,黑桃,红桃,即其单词首字母)。对于牌面的值,我们规定2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < T < J < Q < K < A。
现在你作为上帝,你要从小到大排序每个人手中的牌,并按照给定格式输出。(具体格式见输出描述和样例输出)。

Input

输入包含多组数据
每组数据的第一行包含一个大写字符,表示发牌员是谁。如果该字符为‘#’则表示输入结束。
接下来有两行,每行有52个字符,表示了26张牌,两行加起来一共52张牌。每张牌都由两个字符组成,第一个字符表示花色,第二个字符表示数值。

Output

输出多组数据发牌的结果,每组数据之后需要额外多输出一个空行!!!!!
每组数据应该由24行的组成,输出按照顺时针方向,始终先输出South Player的结果,每位玩家先输出一行即玩家名称(东南西北),接下来五行,第一行和第五行输出固定格式(见样例),第二行和第四行按顺序和格式输出数值(见样例),第三行按顺序和格式输出花色(见样例)。

Sample Input

N CTCAH8CJD4C6D9SQC7S5HAD2HJH9CKD3H6D6D7H3HQH4C5DKHKS9 SJDTS3S7S4C4CQHTSAH2D8DJSTSKS2H5D5DQDAH7C9S8C8S6C2C3 #

Sample Output

South player: +---+---+---+---+---+---+---+---+---+---+---+---+---+ |6 6|A A|6 6|J J|5 5|6 6|7 7|9 9|4 4|5 5|7 7|9 9|T T| | C | C | D | D | S | S | S | S | H | H | H | H | H | |6 6|A A|6 6|J J|5 5|6 6|7 7|9 9|4 4|5 5|7 7|9 9|T T| +---+---+---+---+---+---+---+---+---+---+---+---+---+ West player: +---+---+---+---+---+---+---+---+---+---+---+---+---+ |2 2|5 5|9 9|K K|5 5|7 7|9 9|4 4|T T|J J|A A|8 8|A A| | C | C | C | C | D | D | D | S | S | S | S | H | H | |2 2|5 5|9 9|K K|5 5|7 7|9 9|4 4|T T|J J|A A|8 8|A A| +---+---+---+---+---+---+---+---+---+---+---+---+---+ North player: +---+---+---+---+---+---+---+---+---+---+---+---+---+ |3 3|4 4|J J|2 2|3 3|T T|Q Q|K K|8 8|Q Q|K K|2 2|3 3| | C | C | C | D | D | D | D | D | S | S | S | H | H | |3 3|4 4|J J|2 2|3 3|T T|Q Q|K K|8 8|Q Q|K K|2 2|3 3| +---+---+---+---+---+---+---+---+---+---+---+---+---+ East player: +---+---+---+---+---+---+---+---+---+---+---+---+---+ |7 7|8 8|T T|Q Q|4 4|8 8|A A|2 2|3 3|6 6|J J|Q Q|K K| | C | C | C | C | D | D | D | S | S | H | H | H | H | |7 7|8 8|T T|Q Q|4 4|8 8|A A|2 2|3 3|6 6|J J|Q Q|K K| +---+---+---+---+---+---+---+---+---+---+---+---+---+ //这个题也是暴力解决,用到了结构体排序,格式化输入输出等技巧 #include #include using namespace std; enum dir { } dir; typedef struct card { char hua; char num; } card; card total[4][13]; // //S W N E inline int getDirNum(char a) { switch(a) { case 'S': return 0; case 'W': return 1; case 'N': return 2; case 'E': return 3; default: return 4; } } //C,D,S,H inline int getHuaNum(char a) { switch(a) { case 'C': return 1; case 'D': return 2; case 'S': return 3; case 'H': return 4; default: return 0; } } //2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < T < J < Q < K < A inline int getNumNum(char a) { if(a<='9')return a-'0'; switch(a) { case 'T': return 10; case 'J': return 11; case 'Q': return 12; case 'K': return 13; case 'A': return 14; default: return 0; } } bool operator < (card& a,card& b) { int am,bm,aa,ba; if(getHuaNum(a.hua)==getHuaNum(b.hua)) { return getNumNum(a.num)<getNumNum(b.num); } else { return getHuaNum(a.hua)<getHuaNum(b.hua); } } void printDir(int i){ switch(i) { case 0: printf("South player:\n"); return; case 1: printf("West player:\n"); return; case 2: printf("North player:\n"); return; case 3: printf("East player:\n"); return; default: return; } } void printCards(card* s) { printf("+---+---+---+---+---+---+---+---+---+---+---+---+---+"); for(int i=0; i<13; i++) { if(i==0) {//注意竖线'|'打印的位置,首位都要打印 printf("\n|%c %c|",s[i].num,s[i].num); } else { printf("%c %c|",s[i].num,s[i].num); } } for(int i=0; i<13; i++) { if(i==0) { printf("\n| %c |",s[i].hua); } else { printf(" %c |",s[i].hua); } } for(int i=0; i<13; i++) { if(i==0) { printf("\n|%c %c|",s[i].num,s[i].num); } else { printf("%c %c|",s[i].num,s[i].num); } } printf("\n+---+---+---+---+---+---+---+---+---+---+---+---+---+\n"); } int main() { char N; //freopen("input.txt","r",stdin); while(~scanf("%c",&N) && N!='#') { getchar();//吃掉回车 int id=getDirNum(N)+1;//计算起始索引 for(int i=0; i<26; i++) { card& temp=total[(i+id)%4][i/4]; scanf("%c%c",&(temp.hua),&(temp.num)); } getchar(); for(int i=26; i<52; i++) { card& temp=total[(i+id)%4][i/4]; scanf("%c%c",&(temp.hua),&(temp.num)); } getchar(); for(int i=0; i<4; i++) { sort(&total[i][0],&total[i][13]); printDir(i); printCards(total[i]); } printf("\n"); } }
作者:trialley



poj 程序设计 程序 算法

需要 登录 后方可回复, 如果你还没有账号请 注册新账号