C - 瑞神打牌 (不支持C++11;G++和C++编译器都试试!) POJ - 1786

2023-05-16

题目

牌局由四个人构成,围成一圈。我们称四个方向为北 东 南 西。对应的英文是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|
+---+---+---+---+---+---+---+---+---+---+---+---+---+

思路

数据结构

map<char,int> huase 将花色映射为数字方便比较
map<char,int> number 将用字母表示的数字映射成对应数字,方便比较

struct poke
{
 char a[2];
 bool operator<(const poke &p) const
{
 if(this->a[0]!=p.a[0])
  return huase[this->a[0]]<huase[p.a[0]];
 else
  return number[this->a[1]]<number[p.a[1]];
 }
}N[13],E[13],S[13],W[13];

记录东西南北玩家的牌的花色和数字,根据牌大小规则重载比较函数

做法

step1 从命令行接收发牌人和两行发牌顺序,并合并成一个字符串记录在str中
step2 根据发牌人,从对应入口进入发牌循环,将所发牌一次记录在对应的玩家下直到牌全部发完
step3 调用sort函数对W E S N的牌进行排序
step4 根据输出规则对牌进行输出


总结

1、此题直接不断从命令行接收一个个的牌会超时,需要一次性将发牌顺序接收到字符串str中再对字符串进行处理
2、当用scanf(“%c”,&a)接收时一次只可接收一个字符,回车和空格也会被按一个字符接收进来,要注意用getchar()规避。


代码

#include<iostream>
#include<algorithm>
#include<string.h>
#include<map>
using namespace std;
map<char,int> huase;
map<char,int> number;
struct poke
{
	char a[2];
	bool operator<(const poke &p) const
{
	if(this->a[0]!=p.a[0])
		return huase[this->a[0]]<huase[p.a[0]];
	else
		return number[this->a[1]]<number[p.a[1]];
	}
}N[13],E[13],S[13],W[13];
int main()
{
	huase['C']=1;
	huase['D']=2;
	huase['S']=3;
	huase['H']=4;
	number['2']=2;
	number['3']=3;
	number['4']=4;
	number['5']=5;
	number['6']=6;
	number['7']=7;
	number['8']=8;
	number['9']=9;
	number['T']=10;
	number['J']=11;
	number['Q']=12;
	number['K']=13;
	number['A']=14; 
	char fapai;
	cin>>fapai;
	while(fapai!='#')
	{
		string pai1,pai2,pai;
		cin>>pai1>>pai2;
		pai=pai1+pai2;
//		cout<<pai;
		int i=0,j=0;
		while(i<52)
		{
			if(i!=0||fapai=='N')
			{
				E[i/4].a[0]=pai[j++];
				E[i/4].a[1]=pai[j++];
				i++;
//				cout<<E[i/4].a[0]<<E[i/4].a[1];
				if(i==52)
					break;
			}
			if(i!=0||fapai=='E')
			{
				S[i/4].a[0]=pai[j++];
				S[i/4].a[1]=pai[j++];
				i++;
//				cout<<E[i/4].a[0]<<E[i/4].a[1];				
				if(i==52)
					break;								
			}
			if(i!=0||fapai=='S')
			{
				W[i/4].a[0]=pai[j++];
				W[i/4].a[1]=pai[j++];
				i++;
//				cout<<E[i/4].a[0]<<E[i/4].a[1];				
				if(i==52)
					break;					
			}
			if(i!=0||fapai=='W')
			{
				N[i/4].a[0]=pai[j++];
				N[i/4].a[1]=pai[j++];
				i++;
//				cout<<E[i/4].a[0]<<E[i/4].a[1];				
				if(i==52)
					break;								
			}
		}
		sort(N,N+13);
		sort(E,E+13);
		sort(S,S+13);
		sort(W,W+13);
		cout<<"South player:"<<endl;
		cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
		for(int j=0;j<13;j++)
			cout<<"|"<<S[j].a[1]<<' '<<S[j].a[1];
		cout<<'|'<<endl;
		for(int j=0;j<13;j++)
			cout<<"| "<<S[j].a[0]<<' ';
		cout<<'|'<<endl;
		for(int j=0;j<13;j++)
			cout<<"|"<<S[j].a[1]<<' '<<S[j].a[1];
		cout<<'|'<<endl;
		cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
		cout<<"West player:"<<endl;
		cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
		for(int j=0;j<13;j++)
			cout<<"|"<<W[j].a[1]<<' '<<W[j].a[1];
		cout<<'|'<<endl;
		for(int j=0;j<13;j++)
			cout<<"| "<<W[j].a[0]<<' ';
		cout<<'|'<<endl;
		for(int j=0;j<13;j++)
			cout<<"|"<<W[j].a[1]<<' '<<W[j].a[1];
		cout<<'|'<<endl;
		cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;	
		cout<<"North player:"<<endl;
		cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
		for(int j=0;j<13;j++)
			cout<<"|"<<N[j].a[1]<<' '<<N[j].a[1];
		cout<<'|'<<endl;
		for(int j=0;j<13;j++)
			cout<<"| "<<N[j].a[0]<<' ';
		cout<<'|'<<endl;
		for(int j=0;j<13;j++)
			cout<<"|"<<N[j].a[1]<<' '<<N[j].a[1];
		cout<<'|'<<endl;
		cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;	
		cout<<"East player:"<<endl;
		cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;
		for(int j=0;j<13;j++)
			cout<<"|"<<E[j].a[1]<<' '<<E[j].a[1];
		cout<<'|'<<endl;
		for(int j=0;j<13;j++)
			cout<<"| "<<E[j].a[0]<<' ';
		cout<<'|'<<endl;
		for(int j=0;j<13;j++)
			cout<<"|"<<E[j].a[1]<<' '<<E[j].a[1];
		cout<<'|'<<endl;
		cout<<"+---+---+---+---+---+---+---+---+---+---+---+---+---+"<<endl;	
		cout<<endl;	
		cin>>fapai;											
	}
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C - 瑞神打牌 (不支持C++11;G++和C++编译器都试试!) POJ - 1786 的相关文章

  • 银河麒麟操作系统以root用户登录的方法

    默认情况下 xff0c 银河麒麟V10操作系统不允许root用户登录 xff0c 也不告诉你密码是什么 xff0c 但是如果需要root用户登录的时候 xff0c 可以使用命令 xff1a su 输入密码后 xff0c 就能进入root用户
  • 安装卸载EMBY,jellyfin

    这是个回忆记录 xff0c 怕时间久了忘记了 xff0c 记录可能不太全 环境是 xff1a UNAS xff0c debian xff0c 1 安装emby xff0c 去官网下载emby deb 用命名安装 安装后访问正常 卸载就麻烦了
  • centos8 OPEN LDAP部署

    英文安装文档 比较清晰 xff0c 不过为了以防万一还是记录一下 1 安装 openldap openldap servers root 64 yl08 tools yum install openldap openldap servers
  • [CentOS入门](一)Linux基础

    登陆系统方式 xff1a 文本登陆图形登陆远程登陆 终端的使用方式 xff1a centos有5个虚拟文本终端 xff0c 1个图形终端 tty 命令查看当前虚拟终端 系统支持多用户 xff08 包括使用相同用户 xff09 同时登录系统
  • [Linux]LVM (Linux 逻辑卷管理)

    概念 xff1a LVM是 Logical Volume Manager xff08 逻辑卷管理 xff09 的简写 xff0c 它是Linux环境下对磁盘分区进行管理的一种机制 PV xff1a 硬盘和分区都可以标记为PV xff0c P
  • [CentOS入门](二)Linux Bash

    Bash命令 xff1a Shell是用户与操作系统交互的入口 xff0c Bash是最常用的Linux Shell Bash命令格式 xff1a 命令 选项 参数 中间用空格分隔 命令选项参数ls lh var 如果参数中包含空格则需要在
  • 逻辑回归(LogisticRegression)算法及简单案例

    逻辑回归 LogisticRegression 算法及简单案例 大家好 xff0c 我是W 逻辑回归虽然名字有回归 xff0c 但是实际上是分类模型 xff0c 常用于二分类 回归的意思是 xff1a 在二维空间中找到一条最佳拟合直线去拟合
  • [CentOS入门](三)文件系统

    Linux文件系统结构树 xff1a 目录中颜色的含义 xff1a 青色 xff1a 指向另外一个位置 xff0c 软连接 ls显示文件夹中的文件链接指向位置 xff1a ls folder l蓝色 xff1a 一个文件夹绿色 xff1a
  • [CentOS入门](四)编辑器

    vim xff1a vi vim是一种Linux自带的文本编辑器 xff0c 也是常用的文本编辑器之一 xff0c vim相对于vi增加了代码颜色等功能 部分Linux最小化安装时会预装vi xff0c 但不包含vim xff0c 手动安装
  • [CentOS入门](五)系统软件管理

    RPM RPM是由红帽开发 xff0c 用于管理软件包的组件 xff0c 但是其原始设计理念是开放式的 xff0c 包括OpenLinux S u S E 以及Turbo Linux等Linux的分发版本都有采用 rpm是软件的最小单位 r
  • [CentOS入门](六)用户、组、权限

    用户 xff1a 用户ID为0的用户为超级用户 xff0c 0 500之间为系统级用户 xff0c 为服务保留 xff0c 通常情况新建的用户UID gt 500 用户文件保存在 etc passwd文件中 组 xff1a 每个用户有一个私
  • Traccar记录足迹-服务搭建及使用

    Traccar介绍 Traccar是一款开源的可以跟踪GPS设备位置的应用 xff0c 服务端支持Windows x64 Linux x64 Linux ARM 客户端支持GPS设备 Android设备 IOS设备 搭建Traccar服务器
  • [网络]OSPF理论

    特性 xff1a 分类 xff1a 无类 xff0c 链路状态协议封装 xff1a ip xff08 89 xff09 更新目标地址 xff1a 224 0 0 5 224 0 0 6 支持单播更新方式 xff1a 定时 完整定时更新 xf
  • [网络]IPV6

    IPV6优势 xff1a 更大地址空间 xff08 2 128 xff09 端到端的全球可达性层次化编址利于聚合 xff08 每个运营商一个地址块 xff09 组播的使用 xff08 Server传播一份流量 xff0c 通过组播扩散到用户
  • Proxmox VE(PVE)+ceph+物理网络规划-超融合生产环境安装部署案例

    1 Proxmox Virtual Environment介绍 Proxmox VE 是用于企业虚拟化的开源服务器管理平台 它在单个平台上紧密集成了KVM虚拟机管理程序和LXC xff0c 软件定义的存储以及网络功能 借助基于Web的集成用
  • [XPlane11/12]同步更新Zibo737插件下载-更新至3.54.17-插件搬运

    Boeing B737 800X mod 链接中包括XPlane11和XPlane12版 XPlane11版本已更新至3 54 17 xff1b XPlane12版本已更新至2 1 一 下载链接 xff1a 捐助ZIBOmod xff1a
  • Proxmox VE(PVE)备份组件:PBS(Proxmox Backup Server)部署及使用教程

    1 Proxmox Backup Server xff08 pbs xff09 介绍 Proxmox Backup Server xff08 pbs xff09 是与pve配套的备份解决方案 xff0c 用于备份和恢复虚拟机 容器和物理主机
  • maven mirror

    lt mirror gt lt id gt UK lt id gt lt name gt UK Central lt name gt lt url gt http uk maven org maven2 lt url gt lt mirro
  • 1002 A+B for Polynomials (25分)

    题目大意 输入两行 xff0c 每行格式如上 xff0c K为多项式中非零项的个数 xff0c N为指数 xff0c aN为该项的系数 最后输出两个多项式的和 思路 xff1a 用一个结构体数组 ploy xff0c 数组中的每个元素存储该
  • linux/unix 使用airport

    把airport引入到用户命令里 xff0c 建立一个软连接 span class hljs built in sudo span ln span class hljs operator s span System Library Priv

随机推荐