2017第八届蓝桥杯 08 拉马车(java)

Java实现第八届蓝桥杯拉马车 拉马车 题目描述 小的时候,你玩过纸牌游戏吗? 有一种叫做“拉马车”的游戏,规则很简单,却很吸引小朋友。 其规则简述如下: 假设参加游戏的小朋友是A和B,游戏开始的时候,他们得到的随机的纸牌序列如下: A方:[K, 8, X, K, A, 2, A, 9, 5, A] B方:[2, 7, K, 5, J, 5, Q, 6, K, 4] 其中的X表示“10”,我们忽略了纸牌的花色。 从A方开始... 阅读详情


标题:拉马车


小的时候,你玩过纸牌游戏吗?
有一种叫做“拉马车”的游戏,规则很简单,却很吸引小朋友。


其规则简述如下:
假设参加游戏的小朋友是A和B,游戏开始的时候,他们得到的随机的纸牌序列如下:
A方:[K, 8, X, K, A, 2, A, 9, 5, A]
B方:[2, 7, K, 5, J, 5, Q, 6, K, 4]


其中的X表示“10”,我们忽略了纸牌的花色。


从A方开始,A、B双方轮流出牌。


当轮到某一方出牌时,他从自己的纸牌队列的头部拿走一张,放到桌上,并且压在最上面一张纸牌上(如果有的话)。


此例中,游戏过程:
A出K,B出2,A出8,B出7,A出X,此时桌上的序列为:


K,2,8,7,X


当轮到B出牌时,他的牌K与桌上的纸牌序列中的K相同,则把包括K在内的以及两个K之间的纸牌都赢回来,放入自己牌的队尾。
注意:为了操作方便,放入牌的顺序是与桌上的顺序相反的。
此时,A、B双方的手里牌为:
A方:[K, A, 2, A, 9, 5, A]
B方:[5, J, 5, Q, 6, K, 4, K, X, 7, 8, 2, K]


赢牌的一方继续出牌。也就是B接着出5,A出K,B出J,A出A,B出5,又赢牌了。
5,K,J,A,5
此时双方手里牌:
A方:[2, A, 9, 5, A]
B方:[Q, 6, K, 4, K, X, 7, 8, 2, K, 5, A, J, K, 5]


    注意:更多的时候赢牌的一方并不能把桌上的牌都赢走,而是拿走相同牌点及其中间的部分。
但无论如何,都是赢牌的一方继续出牌,有的时候刚一出牌又赢了,也是允许的。


    当某一方出掉手里最后一张牌,但无法从桌面上赢取牌时,游戏立即结束。


    对于本例的初始手牌情况下,最后A会输掉,而B最后的手里牌为:


9K2A62KAX58K57KJ5


    本题的任务就是已知双方初始牌序,计算游戏结束时,赢的一方手里的牌序。当游戏无法结束时,输出-1。


输入为2行,2个串,分别表示A、B双方初始手里的牌序列。
输出为1行,1个串,表示A先出牌,最后赢的一方手里的牌序。


例如,
输入:
96J5A898QA
6278A7Q973


则程序应该输出:
2J9A7QA6Q6889977


再比如,
输入:
25663K6X7448
J88A5KJXX45A


则程序应该输出:
6KAJ458KXAX885XJ645


我们约定,输入的串的长度不超过30


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms




请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。


所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。


----------------------------
    
笨笨有话说:
    不断删除前边的,又要后边添加.... 如果用数组,需要开一个大点的,请佛祖保佑在游戏结束前,不会用到数组的边缘。


歪歪有话说:
    反正串也不长,不如每次操作都返回一个新的串。


默默有话说:
    我一般都不吱声,这是典型的队列结构,动态数组最好,没有?自己造一个呗!



代码如下:

import java.util.Scanner;

import javax.swing.plaf.basic.BasicPanelUI;

public class Main{
	
	static StringBuffer a = new StringBuffer();//a的牌
	
	static StringBuffer b = new StringBuffer();//b的牌
	
	static StringBuffer c = new StringBuffer();//桌面上的牌
	
	int t;	//桌面上a的第一张或b的第一张牌的位置
	
	public static void main(String[] args){
		
		Main cp = new Main();
		
		Scanner scanner = new Scanner(System.in);
		
		String ap,bp;	//a牌 ,b牌
		
		ap=scanner.next();
		
		bp=scanner.next();
		
		a.append(ap);	//把刚才写的字符串a追加到StringBuffer中
				
		b.append(bp);	//把刚才写的字符串b追加到StringBuffer中
		
		cp.acp();
	}
	
	private void acp() {	//a出牌
		
		t = c.toString().indexOf(a.charAt(0));	//桌面上a即将出的牌的位置,没有则t=-1
		
		c.append(a.charAt(0));	//a将牌放到桌面上
		
		if(t != -1){
			
			c.reverse();	//反转,将桌面复原
			
			a.append(c.substring(0,c.length()-t));
			
			c.reverse();
			
			c.delete(t, c.length());	//删除桌面上a赢走的牌(t到最后一张牌),最后一张牌是刚放进去的
			
			System.out.println(a);
			
			a.deleteCharAt(0);	//a删掉出的牌
			
			acp();	//a继续出牌
			
		} else {	//如果桌面上没有a即将出的牌
			
			a.deleteCharAt(0);	//a删掉出的牌
			
			if(a.length()==0)
				
				js(b);	//游戏结束,b是赢家
			
			else
				bcp();
		}
	}
	
	private void bcp(){	//b出牌
		
		t= c.toString().indexOf(b.charAt(0)); //桌面上b即将出的牌的位置,没有则t=-1
		
		c.append(b.charAt(0));	//b将牌放到桌面上
		
		if(t!=-1){	//如果桌面上有b出的牌,即a可以收牌
			
			c.reverse();	//反转
			
			b.append(c.substring(0, c.length()-t));	//b收牌
			
			c.reverse();	//反转
			
			c.delete(t, c.length());	//桌面去掉b收的牌
			
			b.deleteCharAt(0);	//b删掉出的牌
			
			bcp();
		
		} else {
			
			b.deleteCharAt(0);	//b删掉出的牌
			
			if(b.length()==0)	//b没牌结束游戏 否则a出牌
				
				js(a);	//游戏结束,a是赢家
			
			else
				
				acp();	//a出牌
		}
	}
	
	private void js(StringBuffer y){	//游戏结束,输出赢家的牌
		
		System.out.println(y);
	}
}


https://blog.youkuaiyun.com/wz1997/article/details/79516310

蓝桥杯第八届省赛JAVA真题----拉马车 标题:拉马车小的时候,你玩过纸牌游戏吗?有一种叫做“拉马车”的游戏,规则很简单,却很吸引小朋友。其规则简述如下:假设参加游戏的小朋友是A和B,游戏开始的时候,他们得到的随机的纸牌序列如下:A方:[K, 8, X, K, A, 2, A, 9, 5, A]B方:[2, 7, K, 5, J, 5, Q, 6, K, 4]其中的X表示“10”,我们忽略了纸牌的花色。从A方开始,A、B双方轮流出牌。当轮... 阅读详情

相关推荐

第八届蓝桥杯 拉马车JAVA暴解

假设参加游戏的小朋友是A和B,游戏开始的时候,他们得到的随机的纸牌序列如下: A方:[K, 8, X, K, A, 2, A, 9, 5, A] B方:[2, 7, K, 5, J, 5, Q, 6, K, 4] 其中的X表示“10”,我们忽略了纸牌的花色。 从A方开始,A、B双方轮流出牌。 当轮到某一方出牌时,他从自己的纸牌队列的头部拿走一张,放到桌上,并且压在最上面一张纸牌上(如果有的话)。 ...

高瑜的博客 4356

蓝桥杯:拉马车

目录 题目描述 输入描述 输入为 2 行,2 个串,分别表示A、B双方初始手里的牌序列。我们约定,输入的串的长度不超过 30。 输入输出样例 输入 输出 题目分析: 列表+递归 AC代码(Java): 题目描述 小的时候,你玩过纸牌游戏吗? 有一种叫做"拉马车"的游戏,规则很简单,却很吸引小朋友。 其规则简述如下: 假设参加游戏的小朋友是 A 和 B ,游戏开始的时候,他们得到的随机的纸牌序列如下:...

qq_32468603的博客 3206

第八届蓝桥杯JavaC组省赛真题

解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1、外星日历 题目描述 某星系深处发现了文明遗迹。 他们的...

5997

拉马车 (队列和栈)

  小的时候,你玩过纸牌游戏吗?   有一种叫做“拉马车”的游戏,规则很简单,却很吸引小朋友。   其规则简述如下:   假设参加游戏的小朋友是A和B,游戏开始的时候,他们得到的随机的纸牌序列如下:   A方:[K, 8, X, K, A, 2, A, 9, 5, A]   B方:[2, 7, K, 5, J, 5, Q, 6, ...

weixin_30707875的博客 794

第八届蓝桥杯java省赛大学生C组

蓝桥杯第八届java省赛大学生C组

qiandouwushiling的博客 440

“风色幻想XX:交错轨迹游戏卡顿:从解决d3dx9_xx.dll缺失开始——风色幻想XX优化指南

《风色幻想XX:交错轨迹》作为一款深受玩家喜爱的角色扮演游戏,以其丰富的剧情、独特的角色设定和精美的画面赢得了广泛的赞誉。然而,在游戏过程中,部分玩家可能会遇到游戏卡顿的问题,这不仅影响了游戏体验,还可能让玩家错失精彩的剧情和战斗瞬间。在众多导致游戏卡顿的因素中,d3dx9_xx.dll文件的缺失往往是一个不容忽视的原因。

czl922的博客 1260

拉马车(Java)——蓝桥杯

主要操作:队列,栈,模拟,队列转字符形式拼接输出,栈区域元素拼接到队列的队尾。但无论如何,都是赢牌的一方继续出牌,有的时候刚一出牌又赢了,也是允许的。是一个包含字符的集合或可迭代对象),并将每个字符添加到。1. 赢牌的一方并不能把桌上的牌都赢走,而是拿走。2.队列如何转字符串输出------创建了一个。可能是一个集合之类的数据结构),则遍历。最后,打印出拼接后的结果。相同牌点及其中间的部分。

2303_80464098的博客 493

跨模型的 API 调用与集成:使用 Spring AI 构建可移植的 API 代码,支持多个 AI 模型(如 OpenAI、Anthropic 等)的调用

Spring AI 是 Spring 生态系统中的一部分,旨在提供一种简单、可扩展的方式来集成人工智能模型。Spring AI 使得开发者可以使用现有的 Spring 体系结构方便地访问多种 AI 模型和服务,例如 OpenAI、Anthropic、HuggingFace 等。

秋元的博客 2405

闲聊蓝桥杯JAVA - 拉马车

闲聊蓝桥杯JAVA - 拉马车 D:今天研究比较新鲜的题目,拉马车 标题:拉马车 小的时候,你玩过纸牌游戏吗? 有一种叫做“拉马车”的游戏,规则很简单,却很吸引小朋友。 其规则简述如下: 假设参加游戏的小朋友是A和B,游戏开始的时候,他们得到的随机的纸牌序列如下: A方:[K, 8, X, K, A, 2, A, 9, 5, A] B方:[2, 7, K, 5, J, 5, Q, 6,...

你不知道你不知道的事 1139

YOLOv5 改进点总览:轻量化、高精度的背后有哪些魔改?

YOLOv5是由Ultralytics团队开发的高效目标检测模型,其核心改进包括:主干网络采用CSPDarknet53提升梯度传播效率;特征融合使用PANet增强小目标识别;输出结构采用解耦头设计优化定位和分类任务。此外,YOLOv5通过CIoU损失函数、Mosaic数据增强和SimOTA标签分配机制进一步提升性能。模型支持多种推理格式(ONNX/TensorRT等),并具备自动锚框匹配和多尺度训练功能,使其在轻量化(yolov5s仅7MB)与高性能(最高51.2% mAP)间取得平衡,但缺乏正式论文支撑是

guoguozgw的博客 1806

【CubeMX】STM32G474 HRTIM 互补PWM与死区时间配置实战

本文详细介绍了如何使用STM32CubeMX配置STM32G474的高分辨率定时器HRTIM生成互补PWM波形并精确设置死区时间。通过实战步骤讲解时钟配置、死区计算与高级功能,帮助工程师在电机驱动和电源应用中实现精准控制,避免上下桥臂直通风险。

grpc6streamer的博客 729

拉马车【蓝桥杯真题】

当轮到 BB 出牌时,他的牌 KK 与桌上的纸牌序列中的 KK 相同,则把包括 KK 在内的以及两个 KK 之间的纸牌都赢回来,放入自己牌的队尾。注意:为了操作方便,放入牌的顺序是与桌上的顺序相反的。BB 方:[Q, 6, K, 4, K, X, 7, 8, 2, K, 5, A, J, K, 5][Q,6,K,4,K,X,7,8,2,K,5,A,J,K,5]B 方:[5, J, 5, Q, 6, K, 4, K, X, 7, 8, 2, K][5,J,5,Q,6,K,4,K,X,7,8,2,K]

weixin_62881069的博客 1203

Cryptomatte For Nuke的安装

进入官网https://github.com/Psyop/Cryptomatte,下载文件代码。 将Cryptomatte/nuke里的文件内容复制粘贴到 .nuke文件夹内。 在我们复制粘贴的内容中可以看到两个文件。 同时,我们进入nuke的下载目录,打开plugins文件夹,看到和插件中一样python文件——init.py和menu.py。 我们将Cryptomatte里的init.py和menu.py里的python代码复制粘贴到Nuke/plugins下的init...

qq_41627587的博客 9063

蓝桥杯第八届真题 :拉马车

点击查看:蓝桥杯历年真题 题解目录 拉马车 在这里插入代码片

Xiong-er 的博客 1080

高斯过程的数学理解

G澳大利亚的过程是有益的,特别是当我们有少量数据时。当我在制造业担任数据科学家时,我们的团队使用这种算法来揭示我们接下来应该进行哪些实验条件。但是,此算法不如其他算法流行。在这篇博客中,我将通过可视化和 Python 实现来解释高斯过程 [1] 的数学背景。

gongdiwudu的专栏 3611

【AMD | Docker】超级全面版本:在Docker中验证AMD GPU移动显卡可用性的方法

1. 安装ROCm Docker支持 ■AMD GPU驱动 ■ROCM ■Docker 2. 配置Docker使用ROCm 3. 使用官方ROCm Docker镜像 4. 使用Docker CLI参数访问GPU

静谧、淡雅 688

蓝桥杯省赛Java C组 第八届 (全网最详细,没有之一!)

你好 很高兴你能来看我的文章!

2301_81253150的博客 1021

OpenCV 基于上升距离计算边缘清晰度

OpenCV 基于上升距离计算边缘清晰度

dayuhaitang1的博客 256

第八届蓝桥杯真题解析javaC组

第八届蓝桥杯真题解析javaC组 文章目录***第八届蓝桥杯真题解析javaC组***前言A、外星日历B.兴趣小组C.纸牌三角形D.承压计算E.杨辉三角F.最大公共子串G.Excel地址H.拉马车I.青蛙跳杯子J.图形排版 前言 以下是我做第八届蓝桥杯真题时的一些收获,希望对你们有帮助。 提示:以下是本篇文章正文内容,下面案例可供参考 A、外星日历 问题描述: 某星系深处发现了文明遗迹。 他们的计数也是用十进制。 他们的文明也有日历。日历只有天数,没有年、月的概念。 有趣的是,他们也使用了类似“星期

weixin_49794837的博客 572

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

第八届蓝桥杯个人省赛(软件类)C组第八题拉马车

标题:拉马车 小的时候,你玩过纸牌游戏吗? 有一种叫做“拉马车”的游戏,规则很简单,却很吸引小朋友。 其规则简述如下: 假设参加游戏的小朋友是A和B,游戏开始的时候,他们得到的随机的纸牌序列如下: A方:[K, 8, X, K, A, 2, A, 9, 5, A] B方:[2, 7, K, 5, J, 5, Q, 6, K, 4] 其中的X表示“10”,我们忽略了纸牌的花色。 从A方开始,A、B双方轮流出牌。 当轮到某一方出牌时,他从自己的纸牌队列的头部拿走一张,放到桌上,并且压在最上面一张纸牌.

这个人很懒什么都没有留下 199

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

第八届蓝桥杯javaC组真题

外星日历 某星系深处发现了文明遗迹。 他们的计数也是用十进制。 他们的文明也有日历。日历只有天数,没有年、月的概念。 有趣的是,他们也使用了类似“星期”的概念, 只不过他们的一个星期包含了9天, 为了方便,这里分别记为: A,B,C....H,I 从一些资料上看到, 他们的23日是星期E 他们的190日是星期A 他们的343251日是星期I 令人兴奋的是,他们居然也预见了“世...

u011917813的博客 1952

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

蓝桥杯 拉马车 java_[蓝桥杯][2017年第八届真题]拉马车 (C++代码)

瞎模拟,当游戏次数大于 1W 我们可以认为游戏不能结束,(其实这题并没有不能结束的情况,我试过了 0v0)参考代码:#include#defineInf0x3F3F3F3F#defineLocfreopen("baka.in","r",stdin)typedeflonglongLL;usingnamespacestd;stackT;stringA,B;mapV;int...

weixin_35343226的博客 250
上一篇: 蓝桥杯 算法提高VIP 笨小猴(java)
下一篇: 蓝桥杯 算法提高VIP 计算器(java)
mainn
博客等级 码龄10年 865粉丝 447原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值