Prev43 历届试题 拉马车

题目如下:

问题描述:小的时候,你玩过纸牌游戏吗?有一种叫做“拉马车”的游戏,规则很简单,却很吸引小朋友。其规则简述如下:假设参加游戏的小朋友是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资源约定:峰值内存消耗(含虚拟机) < 256MCPU消耗 < 1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。注意:main函数需要返回0;只使用ANSI C/ANSI C++ 标准;不要调用依赖于编译环境或操作系统的特殊函数。所有依赖的函数必须明确地在源文件中 #include <xxx>不能通过工程设置而省略常用头文件。提交程序时,注意选择所期望的语言类型和编译器类型。----------------------------笨笨有话说:不断删除前边的,又要后边添加.... 如果用数组,需要开一个大点的,请佛祖保佑在游戏结束前,不会用到数组的边缘。歪歪有话说:反正串也不长,不如每次操作都返回一个新的串。默默有话说:我一般都不吱声,这是典型的队列结构,动态数组最好,没有?自己造一个呗!

这道题暴力模拟就完事了,没啥好说的

源码和注释如下

/*** @Description: 历届试题 拉马车* @ClassName: Prev43* @author: fan.yang* @date: 2020/09/25 15:55*/
public class Prev43 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//A方StringBuffer a = new StringBuffer(scanner.next());//B方StringBuffer b = new StringBuffer(scanner.next());//桌上的牌StringBuffer c = new StringBuffer();//分别代表A和B方手中第一张牌在上面两个sb中的位置//出一张牌 head往后移1位int aHead = 0;int bHead = 0;//记录某方得到胜利后 谁先出牌  true:A方 false:B方 默认为A方先boolean flag = true;//sum代表出牌次数 我这边设定当双方出牌总计超过1000次就代表这次没胜利方//这个要看蓝桥的数据了 数据水的话1000次够了...int sum = 0;while(sum++ < 1000){//被赢走的牌 如果桌上的牌是ABCDEB 那么能被赢走的就是BCDEBStringBuffer sb;char ch;int index;//break标签 break tt;后会跳到这里tt:if(flag){//A方先//如果其中一个没牌了就退出循环if(aHead == a.length() || bHead == b.length()){break;}//否则就正常取A的第一张牌ch = a.charAt(aHead++);//放到桌上c.append(ch);//如果//1.桌上的牌不止一张(只有一张那就说明之前桌上没牌,一张也肯定不符合赢牌规则)//2.如果刚放到桌上牌存在于这个桌上,并且不是最后一张(最后一张是刚放的)//符合上述标准就赢if(c.length() != 1 && (index = c.indexOf(ch + "")) != -1 && index != c.length() - 1){//截取可以赢的牌sb = new StringBuffer(c.substring(index, c.length()));//倒一下a.append(sb.reverse());//把桌上赢取的牌去掉c.delete(index, c.length());//回到上面 flag依旧是true A方先break tt;}ch = b.charAt(bHead++);c.append(ch);if(c.length() != 1 && (index = c.indexOf(ch + "")) != -1 && index != c.length() - 1){sb = new StringBuffer(c.substring(index, c.length()));b.append(sb.reverse());c.delete(index, c.length());//flag设为false 回到上面 B方先flag = false;break tt;}}else{//这里一样 只是B先 A后if(aHead == a.length() || bHead == b.length()){break;}ch = b.charAt(bHead++);c.append(ch);if(c.length() != 1 && (index = c.indexOf(ch + "")) != -1 && index != c.length() - 1){sb = new StringBuffer(c.substring(index, c.length()));b.append(sb.reverse());c.delete(index, c.length());break tt;}ch = a.charAt(aHead++);c.append(ch);if(c.length() != 1 && (index = c.indexOf(ch + "")) != -1 && index != c.length() - 1){sb = new StringBuffer(c.substring(index, c.length()));a.append(sb.reverse());c.delete(index, c.length());flag = true;break tt;}}}//看A方的牌没了 还是B方的牌没了if(aHead == a.length()){//A的牌没了就代表B赢了 就把B的牌输出System.out.println(b.substring(bHead, b.length()));}else if(bHead == b.length()){//B的牌没了就代表A赢了 就把A的牌输出System.out.println(a.substring(aHead, a.length()));}else{//如果A和B都还有牌 那就平局System.out.println(-1);}}}

蓝桥杯 历届试题 拉马车 java相关推荐

  1. java九宫排序,蓝桥杯 历届试题 九宫重排 java

    list = new ArrayList(); list.add(new Move(x1,y1,0,start));//添加初始状态进入list set.add(start);//添加初始字符串进入s ...

  2. 蓝桥杯c语言试题幸运数,蓝桥杯  历届试题 幸运数  dfs

    时间限制:1.0s   内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成 . 首先从1开始写出自然数1,2,3,4,5,6,. ...

  3. 历届试题+九宫重排+java_蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)...

    Description 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...

  4. [蓝桥杯][历届试题]国王的烦恼(反向+并查集)

    问题 1435: [蓝桥杯][历届试题]国王的烦恼 时间限制: 1Sec 内存限制: 128MB 提交: 802 解决: 213 题目描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了 ...

  5. 蓝桥杯 - 历届试题 - 日期问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_33531813/article/details/79516258 </div>&l ...

  6. 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索

    问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  7. 二分搜索,POJ2456,NYOJ 914, 区间移位-蓝桥杯-历届试题

    二分搜索是不断缩减可能解的范围来得到最优解, 因为每次是折半, 所以指数爆炸有多快,这个效率就有多高 POJ2456为例, 传送门 简而言之, 就是将牛之间的距离的最小值最大化. #include&l ...

  8. 蓝桥杯历届试题代码参考

    蓝桥杯历届试题代码参考 历届试题 核桃的数量 打印十字图 带分数 剪格子 错误票据 翻硬币 连号区间数 买不到的数目 大臣的旅费 幸运数 横向打印二叉树 危险系数 网络寻路 高僧斗法 格子刷油漆 农场 ...

  9. 问题 1433: [蓝桥杯][历届试题]危险系数(并查集and暴力)

    问题 1433: [蓝桥杯][历届试题]危险系数 时间限制: 1Sec 内存限制: 128MB 提交: 123 解决: 39 题目描述 问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的 ...

最新文章

  1. Sentry UDFWhiteList bug分析
  2. 使用GPU在caffe上进行CNN训练
  3. Qt::WA_TransparentForMouseEvents用法
  4. 【script】python 使用json模块实现字符串与字典的相互转换
  5. 测试开发之软件测试模型
  6. [九度][何海涛] 二叉树中和为某一值的路径
  7. asp.net的条形码
  8. 三层架构和mvc的区别_谈谈对于企业级系统架构的理解
  9. 【C#进阶3-4】C#设计模式
  10. vue-router的参数的传递、懒加载以及嵌套路由的使用
  11. 5G牌照发放 ,手机产业将迎来第二春。
  12. Win10使用说明 - 任务栏设置、触摸板手势和使用偏好
  13. 动态SQL之choose
  14. 腾讯会议html代码,电脑端使用腾讯会议的加入会议步骤
  15. 移动硬盘插到电脑后显示在设备和打印机解决办法
  16. 国标视频平台搭建(七)配置https访问
  17. 克鲁斯卡尔(kruskal)算法代码释义
  18. 社交数据在征信领域的应用探索
  19. 冒泡排序由浅入深详细分析图解
  20. iPhone X 适配

热门文章

  1. 20210829-基于CentOS7/Linux配置ssh免密登录
  2. ICCV 2021 最新200篇ICCV2021论文分方向汇总
  3. css中justify用法,CSS text-justify用法及代码示例
  4. 消息队列中间件之RabbitMQ(上)
  5. 华清之旅校招实习经历
  6. 劳务报酬所得税java程序计算
  7. 【12月】RT-Thread VL53L0X TOF传感器驱动实现
  8. 夺命雷公狗---DEDECMS----21dedecms按照地区取出电影内容
  9. 你用了多长时间存了10万块钱?
  10. 高中生学python培养思维能力_python学习(七周七第二章结构化思维及如何学习)...