算法 字符串【牛客网HJ88 扑克牌比大小 巧用string容器】

【牛客·华为真题】Python扑克牌大小 题目: 思路:分情况讨论,只要不要漏掉,就没什么问题。第一种情况某一个是对王,输出;第二种情况长度不相等且都不是炸弹,输出error;第三种长度相等,因为是排好序的,直接比较最后一张牌的大小,输出大的那个,这里我用了一个列表;第四种情况某一个为4个的炸弹,输出那个就好了 代码: a,b = map(str,input().split('-')) card1 = a.split(' ') card2 = b.split(' ') if card1 == ['joker', 'JOKER'. 阅读详情

借助本题我们来复习一下string类。

先看题:

一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4 4 4 4-joker JOKER。
请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。
基本规则:
(1)输入每手牌可能是个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
(2)除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子);
(3)大小规则跟大家平时了解的常见规则相同,个子、对子、三个比较牌面大小;顺子比较最小牌大小;炸弹大于前面所有的牌,炸弹之间比较牌面大小;对王是最大的牌;

(4)输入的两手牌不会出现相等的情况。

输入描述:

输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如 4 4 4 4-joker JOKER。

输出描述:

输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。

输入

4 4 4 4-joker JOKER

输出

joker JOKER

string类: 

1、字符串拼接 (+=)

可以使用str3 += "xxx";

这样可以直接追加;

还可以利用append的方式,追加某段字符的前n个。

string str3 = "I";
	str3.append(" love ");
	str3.append("game abcde", 4);

2、字符串查找 (find & rfind & replace)

find("xxx");

在母串中查找子串,并返回子串的地址。

如:

	string str = "55522";
	int pos = str.find("52");
	cout << pos;

返回值为2。(下标从零开始)

rfind是从右边开始。

replace(起始位置,终止位置,替换字符串);

这里会把新字符串,替换起始位置到终止位置的字符串。

3、字符串比较(compare) 

= 返回 0

> 返回 1

< 返回 -1

从第一个字符串开始,依次向后比较。

4、字符串存取(str.at(num))

string中单个字符存取方式有两种

  • char& operator[](int n); //通过[]方式取字符
  • char& at(int n); //通过at方法获取字符

5、string插入和删除(insert & erase)

    string str = "hello";
	str.insert(1, "111");
	cout << str << endl;
 
	str.erase(1, 3);  //从1号位置开始3个字符
	cout << str << endl;

输出:

6、子串(substr)

  • string substr(int pos = 0, int n = npos) const; //返回由pos开始的n个字符组成的字符串

注意!这里的第一个参数是起始位置,第二个参数是返回的字符数量,并不是终止位置。

分割Email:

 

现在来分析题:

首先,对于牌来说,分两种情况:

1、牌型不同

牌型不同的情况只有两种:

左右至少一处出现炸弹和王炸。

这种情况,如果左右至少一处出现了王炸,那么直接输出王炸即可;

如果双方均无王炸,那么计算左右两边空格的个数,

炸弹的空格个数为3,其余牌均不为3。

输出为3的那副牌即可。

2、牌型相同

对于牌型相同,我们需要先在定义两个临时牌,并追加空格。

然后找第一个元素:

找到第一个元素后,再通过其在poker中的下标,来判定大小。

用find函数和substr函数来获取第一个牌面大小,然后比较即可。

 

如何比较牌的大小呢?

我们可以将牌存入到一个字符串中。

string poker = "345678910JQKA2jokerJOKER"

先利用字符串查找函数,找到输入中的符号"-",

然后通过这个位置进行分割,得到前后两手牌。

先后进行牌型不同和相同的判定,最后得出答案。

 

代码:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <iostream>
#include <list>
#include <string>
#include <algorithm>

using namespace std;

void test01()
{
	string poker = "345678910JQKA2jokerJOKER";
	string in;
	while (getline(cin, in))
	{
		int pos;
		pos = in.find("-");
		string left, right;
		left = in.substr(0, pos);
		right = in.substr(pos + 1);
		int count_left = count(left.begin(), left.end(), ' ');
		int count_right = count(right.begin(), right.end(), ' ');
		//牌型不同
		if (count_left != count_right)
		{
			if (left == "joker JOKER" || right == "joker JOKER")
			{
				cout << "joker JOKER" << endl;
			}
			else if(count_left == 3)
			{
				cout << left<<endl;
			}
			else if(count_right == 3)
			{
				cout << right<<endl;
			}
			else
			{
				cout << "ERROR" << endl;
			}
		}
		//牌型相同
		else
		{
			string leftret;
			string rightret;
			leftret = left+" ";
			rightret = right+ " ";
			int leftpos = leftret.find(" ");
			int rightpos = rightret.find(" ");
			string left1 = leftret.substr(0, leftpos);
			string right1 = rightret.substr(0, rightpos);
			int leftnum = poker.find(left1);
			int rightnum = poker.find(right1);
			if (leftnum > rightnum)
			{
				cout << left << endl;
			}
			else
			{
				cout << right << endl;
			}
		}
	}
	
}

int main()
{
	test01();
	return 0;
}

 

 

 

 

 

 

 

 

 

 

【华为机试HJ88】扑克牌大小 JAVA全过程详解 一、题目描述 一副牌由54张扑克组成,含2~A各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王) 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 现提供两手牌,请比较它们的大小,输出较大的牌,如果不存在比较关系则输出“ERROR”。 基本规则: (1)输入每手牌可能是个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,且顺子已经从小到大排列; (2)除 阅读详情

相关推荐

Python实现比较扑克牌大小程序代码示例

主要介绍了Python实现比较扑克牌大小程序代码示例,具有一定借鉴价值,需要的朋友可以了解下。

HJ8 合并表记录(C++)- 简单、哈希

题目链接:https://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201?tpId=37&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D37%26type%3D37&difficulty=&judgeStatus=&tags=&title=&gioEnter=menu 题目如下:...

qq_40467670的博客 370

解决Linux下Questasim中代码字体非常小

Questasim的source窗口里代码字体非常小 你是不是也遇到这样的问题,在使用Vmware时,Questasim的代码字体非常小,小到完全看不见,连断点都没办法标记。 下面我给出我摸索好久的解决办法,分享给大家。 1.首先,版本是Questasim 10.7c,在Vmware16中打开,情况如下: 不多逼逼,直接上图开搞: 给textFontV2设置值:monospace 12 normal roman 这里一定要注意啦,点完apply之后,不要点ok,直接关闭窗口。 ...

SummerXRT的博客 7810

比较单张扑克牌的大小的小技巧

目的:比较两张扑克牌的大小 思路:利用字符串来完成,比较两个字符在字符串中出现的位置,出现在前面的扑克牌即为小的那个String str="2345678910JQKA2jokerJOKER";return str.indexOf(c1)>str.indexOf(c2);

qq_27838825的博客 2601

STM32F4驱动海康工业相机实战:从PWM信号到精准触发拍照(附完整代码)

本文详细介绍了如何使用STM32F4开发板驱动海康工业相机,实现PWM信号精准触发拍照的完整方案。从硬件连接到PWM信号生成,再到相机触发配置与延迟补偿,提供了实战经验和完整代码,帮助开发者解决工业相机硬件触发中的关键问题。

weixin_33716941的博客 694

用Unity Wheel Collider做坦克转向?3步实现履带式载具物理效果

本文详细解析了如何利用Unity的Wheel Collider组件实现履带式载具的差速转向物理效果。通过思维转换、场景搭建和核心代码实现三步,将Wheel Collider从模拟轮式车辆转向改造为控制履带扭矩差的系统,并深入探讨了参数调试与真实感提升的方法,帮助开发者打造物理反馈扎实的坦克或特种车辆模拟。

weixin_29009971的博客 222

《华为机试》刷题之HJ88 扑克牌大小

一、题目 二、示例 三、代码 dic = {'3' : 1, '4' : 2, '5' : 3, '6' : 4, '7' : 5, '8': 6, '9' : 7, '10' : 8, 'J' : 9, 'Q' : 10, 'K' : 11, 'A' : 12, '2' : 13, 'joker' : 14, 'JOKER' : 15} while True: try: s1, s2 = input().split('-') list

胡萝卜 831

交通流预测爬坑记(一):交通流数据集,原始数据

常用的交通流数据集,持续更新~~

K_first的博客 4万+

【牛客】扑克牌大小

添加链接描述

SickAgaric的博客 1118

碳化硅外延层厚度测量:红外干涉光谱与FFT技术详解

薄膜厚度测量是半导体制造中的关键工艺控制环节,其核心原理基于光的干涉现象。当光在薄膜上下界面反射并叠加时,会产生与厚度相关的干涉条纹。通过分析这些条纹,可以非接触、无损地获取薄膜的精确厚度信息。这项技术的核心价值在于实现了对关键工艺参数的在线、快速监控,对于提升器件性能与生产良率至关重要。在第三代半导体,尤其是碳化硅功率器件的制造中,外延层厚度直接决定了器件的击穿电压和导通电阻等核心性能。红外干涉光谱法因其对碳化硅材料在红外波段的良好透过性,成为该领域主流的厚度测量方案。通过快速傅里叶变换(FFT)对采集到

weixin_29032489的博客 306

Pyhon在振动信号处理中的高级应用(一):振动信号特征(时域、频域)提取

文章目录一、概述二、算法原理2.1 时域统计特征三、python代码实现 一、概述 二、算法原理   这里我们借鉴西安交通大学机械学院雷教授的论文《Fault diagnosis of rotating machinery based on multiple ANFIS combination with GAs》相关研究成果。雷教授在论文中共列举了4类共24种振动信号的时域和频域特征。 2.1 时域统计特征 p1=∑n=1Nx(n)NP2=∑n=1N(x(n)−p1)2N−1p3=(∑n=1N∣x(n)∣N

白银时代的博客 1万+

华为机试-088-较难-HJ88.扑克牌大小

【代码】华为机试-088-较难-HJ88.扑克牌大小

tttzzzqqq2018的博客 308

【Python机器学习】零基础掌握TweedieRegressor广义线性回归模型

本次文章主要介绍了如何使用Tweedie回归模型预测电动汽车的实际续航里程。基于车速、气温和驾驶习惯等多种因素,模型能够准确地预测出电动汽车的续航里程,从而为生产商和消费者提供有用的信息。优点总结,Tweedie回归模型在处理具有多元性和高度散布的数据方面表现出色,特别适用于需要考虑多种影响因素的预测任务。优点名称对应描述说明多元性强可以同时处理多种类型和维度的数据高度可定制允许用户自定义损失函数和正则项对异常值鲁棒能够较好地处理数据中的异常值易于解释参数和预测结果都相对容易解释。

Mr数据杨 1004

【刷题】牛客网——扑克牌大小(输入两手牌,请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。)

题目描述: 牛客网——扑克牌大小 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王): 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 输入两手牌,两手牌之间用"-“连接,每手牌的每张牌以空格分隔,”-"两边没有空格,如:4 4 4 4-joker JOKER。 请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。 基本规则: (.

m0_46613023的博客 753

倾斜摄影数据转换为3DTile格式的方法:基于CesiumLab GIS

通过使用CesiumLab GIS,倾斜摄影数据可以方便地转换为3DTile格式,并在CesiumJS等3D地理信息可视化工具中进行展示和分析。一旦成功导入3DTile数据,就可以在CesiumLab GIS中利用其强大的可视化和分析功能进行进一步的处理。转换完成后,可以将生成的3DTile数据导入到CesiumLab GIS中进行可视化和分析。启动CesiumLab GIS应用程序,并按照界面上的指导导入转换后的3DTile数据。脚本将开始执行,并将倾斜摄影数据转换为3DTile格式。

ObDjango的博客 1075

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++字符串的基本用法

字符串中的str中的修改和替换的基本用法 1、一般字符串中的assign的用法: #include <iostream> #include <stdio.h> #include <string> using namespace std; //以下就是通过if语句来看出不同 int main() { //1、一般常见的字符串之间的赋值,assign...

Littlehero_121的博客 496

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【HJ88】斗地主扑克牌-手牌大小比较(模拟)

1.题目 2.思路 手牌比较: (1)如果手牌的类型不同(分为三种情况): 1)存在王炸,则直接输出王炸; 2)else if存在炸弹,则直接输出炸弹; 3)其他最后情况:无法比较,直接输出ERROR。 (2)如果手牌的类型相同(单对单、二对二、三对三、炸弹对炸弹、顺子对顺子): 只需要比较该对手牌的第一张手牌,如2 2,4,4就抽出2和4比较即可,这个级别rank比较就直接查找第一张手牌字符在std的第一个下标位置进行比较即可-类似哈希(string std=“345678910JQKA2jokerJ

发现问题,并解决问题,批判性思维 1789

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

16年华为机试(三)扑克牌大小

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

west_ahu的博客 1980

扑克牌游戏(字符串操作)

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

a1103000308的博客 2456

string中c_str()的用法

1.语法:1 const char *c_str();c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同。这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针。比如:最好不要这样:1 char* ...

Makefilehoon的博客 1万+

C++ string类-字符串

头文件:#include<string> string 的定义 string str; string 的初始化 可以直接给字符串变量赋值。 string str="hello"; cout<<str<<endl; //hello string 的长度

ASDF的博客 363

C++编程语言中string类介绍

string类是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。同时,C++的算法库对string类也有着很好的支持,并且string类还和C语言的字符串之间有着良好的接口。

liitdar的博客 31万+

C++ 【如何输入带空格的字符串】

一、问题 遇到字符串的算法题,经常会有这样一种情况出现: 定义一个字符串a, 假如我们要让a = "hello world", 这个字符串里是有空格的, 但是对于最常用的两种输入却无法满足: 1、cin是C++中最常用的输入语句,但是当遇到空格或者回车键,输入流即停止。 2、scanf函数一般格式为scanf(“%s”,st),但scanf默认回车和空格是输入不同组之间的间隔和结束符号,所以输入带空格,tab或者回车的字符串是不可以的。 二、解决办法 getline()(包含头文件#.

Kukeoo的博客 4967

算法 动态规划 【机器人路径问题】

目录 一、题目描述 二、思路 动态规划题目类型 1.确定状态 2.转移方程 3.初始条件和边界情况 4. 计算顺序 三、代码 一、题目描述 给定m行n列的网格,有一个机器人从左上角(0,0)出发,每一步可以向下或者向右走一步,问有多少种不同的方式走到右下角。 二、思路 动态规划题目类型 1、计数: 有多少种方式走到右下角 有多少种方法选出k个数使得和为Sum2、求最大最小值: 从左上角走到右下角路径的最大数字和 最长上升子序列长度3、求存...

Kukeoo的博客 4403
上一篇: 算法 链表【牛客网HJ48 初用STL容器与算法解题】
下一篇: MySQL 基础篇 一 【数据库基础】
Kukeoo
博客等级 码龄8年 216粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值