6939 扑克牌

扑克牌游戏(c++版) 在设计 c++ 扑克牌课程的过程中,我遇到了一些问题,其中一些是技术性的问题,另一些是设计上的问题。技术性问题:如何定义类和其相关关系:在开始设计时,我遇到了如何定义类和它们之间的关系,例如玩家类如何与牌类进行关联,如何定义公共属性或方法等等。设计上的问题:1.程序代码逻辑:在编写代码逻辑的过程中,逻辑相对清晰的部分很快就完成了。但是当问题出现时,程序的结构就变得混乱。这时,我需要重新思考代码结构,并将其重构。2. 阅读详情
题目描述和作者反应

最近作者考试的时候遇到了一个难题,题目如下:

描述

小童和小美玩扑克牌的游戏,他们准备了两幅扑克牌。
扑克牌的游戏规则如下:
1.单张扑克牌的顺序:3<4<5<6<7<8<9<X<J<Q<K<A<2<M<F。(X表示10,M表示小王,F表示大王)
2.两张相同的牌可以组成"对子",对子只能与对子比较,对子和单张无法相应,对子的顺序:33<44<55<66<77<88<99<XX<JJ<QQ<KK<AA<22<MM<FF。
3.TM是最大的牌,也称为"王炸",它能大于所有的对子和单张。
4.每一轮出牌,玩家可以出单张、对子或王炸中的一种,但必须符合1,2,3号规则。
现在,小童和小美从两副扑克牌中随机抽取两张牌,由小童先手。两人都采用最优策略出牌,最先出完所有牌的人获胜。若小童获胜,输出Tong;若小美胜出,输出Mei。你能判断谁会获胜吗?

输入描述

输入第一行一个整数T(1<=T<=100000),表示T轮游戏。
接下来T行,每行输入2个长度为2的字符串。第1个字符串表示小童抽取的2张牌,第2个字符串表示小美抽取的2张牌。

输出描述

输出T行,每行1个字符串。若小童获胜,输出Tong;若小美胜出,输出Mei。

样例输入:

2
22 MF
2X M3

样例输出:

Tong
Mei 

作者看题的反应:

  1. 哇!题目好长
  2. 哇!题目好难
  3. 啊!神魔也不会
  4. NO!啊~

于是作者冥思苦想,终于....

考试时间过了T~T

后来....

作者问了一位高人(身份保密)

高人说:

你这个得一个一个判断,不过可以简化一下

作者说:

这题可不可以把他们存储到一个数组里,如:

mb[15]={'3','4','5','6','7','8','9','X','J','Q','K','A','2','M','F'}

然后再判断下标(不明白的可以看后面代码)

高人说:

你这样也可以,但我的更靠谱

 作者就信了

代码

后来作者反骨发作,还是用作者对高人说的方法来做了

代码如下:

#include <bits/stdc++.h>
using namespace std;
int main(){
    char mb[15]={'3','4','5','6','7','8','9','X','J','Q','K','A','2','M','F'},t1,t2,m1,m2;
    int s;
    cin>>s;
    for(int i=0;i<=s;i++){
    	cin>>t1>>t2>>m1>>m2;
    	if((t1=='T'&&t2=='M')||(t1=='M'&&t2=='T')){
			cout<<"Tong";
			continue;
		}
		if((m1=='T'&&m2=='M')||(m1=='M'&&m2=='T')){
			cout<<"Mei";
			continue;
		}
   	 	if(t1==t2&&m1==m2){
			int ti,mi;
			for(int ii=0;ii<=15;ii++){
				if(t1==mb[ii]) ti=ii; 
				if(m1==mb[ii]) mi=ii; 
			}
			if(mi>ti){
				cout<<"Mei";
				continue;
			}else if(ti>mi){
				cout<<"Tong";
                continue;
			}
		}else if(t1==t2&&m1!=m2){
			cout<<"Tong";
            continue;
		}
		else if(m1==m2&&t1!=t2){
			cout<<"Mei";
            continue;
		}else{
			int ti1,ti2,tim,tin,mi1,mi2,mim,min_;
			for(int ii=0;ii<=15;ii++){
				if(t1==mb[ii]) ti1=ii; 
				if(t2==mb[ii]) ti2=ii; 
				if(m1==mb[ii]) mi1=ii; 
				if(m2==mb[ii]) mi2=ii; 
			}
			tim=max(ti1,ti2);
			mim=max(mi1,mi2);
			tin=min(ti1,ti2);
			min_=min(mi1,mi2);
			if(tim>mim){
				cout<<"Tong";
				continue;
			}else if(mim>tim){
				cout<<"Min";
				continue;
			}else{
				if(tin>min_){
					cout<<"Tong";
					continue;
				}else{
					cout<<"Min";
					continue;
				}
			}
		}
    }
	return 0;
}

​
思路版(极详细):
#include <bits/stdc++.h>//万能头文件
using namespace std;
int main(){
    char mb[15]={'3','4','5','6','7','8','9','X','J','Q','K','A','2','M','F'},t1,t2,m1,m2;//定义工具数组,小童的两张牌,小美的两张牌
    int s;//定义局数
    cin>>s;//输入局数
    for(int i=0;i<=s;i++){//循环s局
    	cin>>t1>>t2>>m1>>m2;//输入小童的两张牌和小美的两张牌
    	if((t1=='T'&&t2=='M')||(t1=='M'&&t2=='T')){//小童有王炸的两种情况
			cout<<"Tong";//小童胜
			continue;//此局结束
		}
		if((m1=='T'&&m2=='M')||(m1=='M'&&m2=='T')){//小美有王炸的两种情况
			cout<<"Mei";//小美胜
			continue;//此局结束
		}
   	 	if(t1==t2&&m1==m2){//二者都有对子的情况
			int ti,mi;//定义小童的牌在md数组的下标,小美的牌在md数组的下标
			for(int ii=0;ii<=15;ii++){//运行15次(3~F)
				if(t1==mb[ii]) ti=ii; //求小童的牌在md数组的下标并赋值
				if(m1==mb[ii]) mi=ii; //求小美的牌在md数组的下标并赋值
			}
			if(mi>ti){//小美的牌下标大于小童的牌下标
				cout<<"Mei";//小美胜
				continue;//此局结束
			}else if(ti>mi){//小童的牌下标大于小美的牌下标
				cout<<"Tong";//小童胜
                coutinue;//此局结束
			}
		}else if(t1==t2&&m1!=m2){//小童有对子而小美没有
			cout<<"Tong";//小童胜
            continue;//此局结束
		}
		else if(m1==m2&&t1!=t2){//小美有对子而小童没有
			cout<<"Mei";//小美胜
            continue;//此局结束
		}else{//谁都没有对子
			int ti1,ti2,tim,tin,mi1,mi2,mim,min_;//定义小童的第1张牌,小童的第2张牌,小美的第1张牌,小美的第2张牌,小童最大的牌,小童最小的牌,小美最大的牌,小美最小的牌(min是c++函数,所以得用min_)
			for(int ii=0;ii<=15;ii++){运行15次(3~F)
				if(t1==mb[ii]) ti1=ii; //求小童第1张牌在md数组的下标并赋值
				if(t2==mb[ii]) ti2=ii; //求小童第2张牌在md数组的下标并赋值
				if(m1==mb[ii]) mi1=ii; //求小美第1张牌在md数组的下标并赋值
				if(m2==mb[ii]) mi2=ii; //求小美第2张牌在md数组的下标并赋值
			}
			tim=max(ti1,ti2);//求小童最大的牌的下标并赋值
			mim=max(mi1,mi2);//求小童最小的牌的下标并赋值
			tin=min(ti1,ti2);//求小美最大的牌的下标并赋值
			min_=min(mi1,mi2);//求小美最小的牌的下标并赋值
			if(tim>mim){//小童最大的牌的下标比小美最大的牌大
				cout<<"Tong";//小童胜
				continue;//此局结束
			}else if(mim>tim){//小美最大的牌的下标比小童最大的牌大
				cout<<"Min";//小美胜
				continue;//此局结束
			}else{//小童最大的牌的下标和小美最大的牌一样
				if(tin>min_){//小童最小的牌的下标比小美最小的牌大
					cout<<"Tong";//小童胜
					continue;//此局结束
				}else{//小童最小的牌的下标比小美最小的牌小
					cout<<"Min";//小美胜
					continue;//此局结束
				}
			}
		}
    }
	return 0;//养成好习惯
}

​
结果... 

AC(无语)

所以我这算不算偷鸡

3dMax脚本类插件:不写 C++也能造“原生”工具 从plugin关键字到场景持久化,拆解 MAXScript 插件开发全流程! 阅读详情

相关推荐

FPGA实战:基于Basys3的多功能数字钟设计与实现

本文详细介绍了基于Basys3开发板的多功能数字钟设计与实现过程,涵盖FPGA开发、SystemVerilog编程及7段数码管驱动等关键技术。通过模块化设计实现时钟分频、时间计数、按键处理等功能,并提供了优化显示驱动和调试技巧,帮助开发者快速掌握数字电路设计核心概念。

weixin_29186249的博客 659

【c++基础】扑克牌组合

【c++基础】扑克牌组合 小明从一副扑克牌中(没有大小王,J认为是数字11,Q是12,K是13,A是1)抽出2张牌求和,请问能够组合出多少个不相等的数,按照由小到大输出这些数。

star-dusts的博客 1945

华为、Cisco、H3C、中兴网络设备如何配置syslog日志采集

华为、Cisco、H3C、中兴网络设备如何配置syslog日志采集

weixin_40239644的博客 8703

【牛客】[编程题]扑克牌大小 C++

1.题目描述 链接https://www.nowcoder.com/questionTerminal/0a92c75f5d6b4db28fcfa3e65e5c9b3f 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王)???? 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边

金金金金金的博客 1825

Palantir解密:“本体”的建模逻辑及其扩展方向

上一篇重点从对现实世界建模的角度探讨了“本体”在数字化架构中的核心意义。这里借Palantir的“本体”概念、解析Palantir只是起点,目标旨在以他山之石攻玉——探索数字世界的底层架构逻辑,最终为构建自主体系提供思考。Palantir以“本体论”为核心的建模方案是否代表终极答案,不宜过早下结论,但其思路值得深入剖析。

SZSDQJC的博客 2632

不刷机!Jetson AGX Orin无损更新内核与设备树的两种安全方法(附备份恢复脚本)

本文详细介绍了Jetson AGX Orin在不刷机的情况下安全更新内核与设备树的两种方法,包括extlinux.conf动态加载和分区精准刷新方案。通过备份恢复脚本和工业级灾备方案,确保零数据丢失,适用于边缘AI和机器人等关键场景。

weixin_40192258的博客 307

CCF NOI1038. 玩扑克 (C++)

标题1038. 玩扑克 题目描述 又到休息时间了。两个小伙伴要玩扑克牌比大小的游戏:每人分到一种花色的扑克牌,然后每人随机出一张牌,大者胜,最后获胜次数多的人,赢一轮。 不开心的事发生了,玩了一轮后,发现扑克牌竟然少了一张。到底少了几呢? 你能写个程序,快速找到扑克x吗? 输入 输入一行,包括25个用空格分隔的数字(A表示为1,J、Q、K表示为11、12、13)。 输出 输出数字x,表示缺少的扑克...

jiafengfu的优快云博客 1192

从URDF到Gazebo:一个完整的ROS2机械臂仿真项目实战与避坑指南

本文提供了一个完整的ROS2机械臂仿真项目实战指南,详细讲解了从URDF建模、ROS2 Control配置、MoveIt2集成到Gazebo仿真的全流程。文章重点分享了URDF惯性参数设置、Gazebo插件选择、MoveIt2配置修正等关键步骤的避坑经验,帮助开发者快速搭建可用的六轴机械臂仿真环境,实现从静态模型到物理仿真的跨越。

weixin_29279153的博客 273

模拟:打牌排名问题。c++

Vjudge:牌面分析大模拟

qq_44654498的博客 551

电磁兼容(EMC):一文读懂过电应力(EOS)

过电应力(EOS)是指元器件承受的电流或电压应力超过其允许的最大范围。产品的电磁兼容(EMC)失效的一种常见模型为过电应力(EOS),也是电子产品失效的最常见的情况之一。过电应力基本与半导体器件相关,EOS事件包括有:静电放电(ESD)、雷击、系统瞬态、电磁脉冲、充电等。本文将详细讨论一下产品设计中如何关注EOS设计。

linkking27的博客 6485

GEE APP:基于Sentinel-2遥感影像的植被指数(NDVI)和水体指数(NDWI)可视化应用

本文介绍了利用Google Earth Engine(GEE)平台处理Sentinel-2卫星数据的方法,重点讲解NDVI(归一化植被指数)和NDWI(归一化水体指数)的计算与应用。内容包括环境准备、数据加载与处理、指数计算原理、可视化方法以及实际应用案例。教程详细展示了如何定义研究区域、加载影像数据、进行指数运算,并生成专业统计报告和图例。文章还提供了常见问题解答和最佳实践建议,为生态环境监测、农业评估和水资源管理等场景提供了实用工具。通过JavaScript代码示例,读者可以快速掌握GEE平台的遥感影像

此星光明博客 272

1-7 德州扑克(c++)

题目: 最近,阿夸迷于德州扑克。所以她找到了很多人和她一起玩。由于人数众多,阿夸必须更改游戏规则: 所有扑克牌均只看数字,不计花色。 每张卡的值为1、2、3、4、5、6、7、8、9、10、11、12、13 中的一种(对应A,2、3、4、5、6、7, 8、9、10,J,Q,K) 每位玩家从一副完整的扑克牌(没有大小王)中抽出五张扑克牌,可能出现的手牌的值从低到高排列如下: 高牌:不包含以下牌的牌。对...

qq_45788060的博客 1227

79-Halcon-- visualize_object_model_3d 函数功能(交互式3D可视化)

该算子是连接3D数据与决策者的关键可视化桥梁,通过其独特的交互能力和高质量的渲染效果,将复杂的3D信息转化为直观的可视内容,大幅提升工程决策效率和质量。操作符,不仅能在窗口中渲染3D对象,还支持多种交互操作,适用于调试、展示和交互分析场景。本解析将全面探讨其参数功能及工业级应用方案。+几何类型: PointCloud/ TriMesh/CAD。+法线属性: [NX,NY,NZ]+附加数据: Attributes。是Halcon中功能强大的。+顶点属性: [X,Y,Z]+颜色属性: [R,G,B]

weixin_45590420的博客 1205

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 208

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 218

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 332

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 388

蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析

蓝桥杯报名正在火热进行(软件赛报名 2026-10-08—12-18,省赛 2027-04-10),电子学会 12 月软件编程(C/C++ 一级至十级、Python 一级至六级)考级报名也已开启(9/23—12/2),全国青少年信息素养大赛算法应用主题赛同步推进——把 LCA 这个模板练熟,正是冲刺这些赛事树型考点的关键一步。所谓「最近公共祖先」:在一棵以某个节点为根的树里,两个节点 u、v 向上追溯,最早交汇的那个祖先就叫它们的 LCA。比如家谱里,你和你表哥最近的共同长辈就是你们的祖父。

IT_Scratch的博客 533

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 376

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 343

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 301

C++ 运行时多态与虚函数机制全面剖析【面试重点】

构成C++ 运行时多态必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且派生类必须对该虚函数完成重写/覆盖(Override)。只有基类的指针或引用才能既指向基类对象,又指向派生类对象(切片机制);而只有完成了虚函数重写,派生类与基类才具备不同的函数行为,达到“指向谁就调用谁”的效果。在类成员函数的前面加上virtual关键字修饰,该成员函数就成为了虚函数。public:// 成员函数前加 virtual 修饰,声明为虚函数。

Fuyo_0209的博客 435

C++ 求抛物线的顶点、焦点和准线(Finding the vertex, focus and directrix of a parabola)

已知抛物线方程 $ y = ax^2 + bx + c $,可利用公式求其顶点、焦点和准线。顶点为 $ \left( -\frac{b}{2a}, \frac{4ac - b^2}{4a} \right) $,焦点为 $ \left( -\frac{b}{2a}, \frac{4ac - b^2 + 1}{4a} \right) $,准线方程为 $ y = c - \frac{b^2 + 1}{4a} $。以 $ a=5, b=3, c=2 $ 为例,计算得顶点 $(-0.3, 1.55)$,焦点 $(-0

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 163

c++ 超级大坑未定义行为如何避免(下)

尤其是通过。

拒绝AI文,努力在AI时代写出感动人心的好文章 141

C 语言指针与输入输出

指针是 C 语言的魂,输入输出是和人交互的入口。这篇文章把"变量在内存里到底长什么样"讲透,接着用代码验证原码/反码/补码为什么非用补码不可,再拿进制转换、数组、printf/scanf 的格式符收尾。所有输出都是本机 gcc 真实跑出来的。

2401_89953644的博客 160

从“不照人”到“剂量达标”:扇叶遮挡式UV-C空气消毒的工程边界与可验证评估框架

人机共存”正逐渐成为家用 UV-C 空气消毒产品的核心卖点。其中一类常见结构,是把 254 nm 紫外线灯置于吊扇扇叶上方,以扇叶盘作为物理遮挡,同时借助风扇强制对流实现空气循环消毒。专利文献对该结构的意图描述相当清晰:消毒平台遮挡紫外线灯朝下发出的光,使光线射向天花板,从而“不会让紫外线辐射到位于吊扇灯下方的用户”。然而,“结构上不直射”与“工程上安全且有效”之间,仍隔着一段需要实测数据来填补的距离。

HANDY09200的博客 693
上一篇: 晶晶赴约会
下一篇: 我的世界指令大全网易版(待续)
ΜèΛɡ★☆
博客等级 码龄7年 27粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值