编程题:最长的顺子(Java)

题目描述

斗地主起源于湖北十堰房县,据说是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的,如今已风靡整个中国,并流行于互联网上。

牌型: 单顺,又称顺子,最少5张牌,最多12张牌(3…A)不能有2,也不能有大小王,不计花色。 

例如: 3-4-5-6-7-8,7-8-9-10-J-Q,3-4-5-6-7-8-9-10-J-Q-K-A 

可用的牌 3<4<5<6<7<8<9<10<J<Q<K<A<2<B(小王)<C(大王),每种牌除大小王外有四种花色 (共有13×4+2张牌)

输入

输入的第一行为当前手中的牌

输入的第二行为已经出过的牌(包括对手出的和自己出的牌)

输出

最长的顺子 

对手可能构成的最长的顺子(如果有相同长度的顺子,输出牌面最大的那一个),

如果无法构成顺子,则输出 NO-CHAIN。

样例输入
3-3-3-4-4-5-5-6-7-8-9-10-J-Q-K-A-A-A-A
4-5-6-7-8-8-8
样例输出 
9-10-J-Q-K
思路:

        题目要求我们求出对方的最长顺子长度,那么我们就要先得到对方的牌信息,以此来推测对方的最长顺子长度。题目的输入带有我们自己所有的牌,以及目前已经出去的牌,我们由总拍数就能够得到对方的牌数,以此来推测对方的最长顺子长度。

        因为顺子不涉及2和大小王,因此,我们不需要考虑这两种牌对我们影响,只需要考虑剩下牌如何产生顺子,剩下的牌就是3---A这几种牌,总共12种,所以可以定义一个数组长度为12,每个元素代表一种牌的个数是否为0,为零就赋值为0,否则赋值为1代表有这个牌,因此,最后我们就是求一个长度为12的数组的最长连续的1元素的长度,用0(n)的时间复杂度就可以完成要求。

代码:
package Date3Point21;import java.util.*;public class MainD {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);String s1 = scanner.nextLine();String s2 = scanner.nextLine();s1=s1+"-"+s2;String[] split = s1.split("-");int[] nums=new int[12];Arrays.fill(nums,4);Map<String ,Integer> sToInt=new HashMap<>();sToInt.put("J",11);sToInt.put("Q",12);sToInt.put("K",13);sToInt.put("A",1);Map<Integer ,String> IntToS=new HashMap<>();IntToS.put(11,"J");IntToS.put(12,"Q");IntToS.put(13,"K");IntToS.put(1,"A");for(int i=0;i<split.length;i++){int num=0;if(sToInt.containsKey(split[i])){num=sToInt.get(split[i]);}else if(!Objects.equals(split[i], "2")){num= Integer.parseInt(split[i]);}else{continue;}if(num==1){nums[nums.length-1]--;}else{nums[num-3]--;}}String maxStr="";int maxLen=0;String str="";int len=0;for(int i=0;i<nums.length;i++){if(nums[i]==0 || i==nums.length-1){if(nums[i]!=0){len++;str+="A";}if(len>=5 && len>maxLen){maxLen=len;maxStr=str;}else if(len==maxLen && len!=0){if (maxStr.charAt(0)<str.charAt(0)) {maxStr=str;}}len=0;str="";}else{len++;String s="";if(i==nums.length-1){s="A";}else if(IntToS.containsKey(i+3)){s=IntToS.get(i+3);}else{s=String.valueOf(i+3);}if(str.length()==0){str+=s;}else{str+="-"+s;}}}if(maxLen==0 || maxStr.length()<5){System.out.println("NO-CHAIN");}else{System.out.println(maxStr);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在面对一个大型的代码,需要分文件编写的时候,应该怎么办呢;以及在编写出一个功能时,有人想要买这个功能,怎么在不给出源代码的情况下让买家可以使用这个代码功能呢?

我们一点点来&#xff0c;首先&#xff0c;假设我们要写一个加法功能的实现&#xff0c; 这里是在单个文件里调用函数&#xff0c;实现一个加法的功能&#xff0c; 下面我们把自定义函数放在下面&#xff0c;上面对自定义函数进行一个声明&#xff0c; 下面我们把代码放到多个…

【分享】3种方法保护Excel文件不能随意打开

做好的Excel表格不想被他人随意打开&#xff1f;那就一定要看看下面小编分享的3种方法&#xff0c;看看如何禁止打开Excel表格。 方法一&#xff1a;设置密码保护 我们可以给Excel表格设置“打开密码”&#xff0c;这样只有输入正确的密码&#xff0c;才能打开表格。 设置步骤…

java动态规划学习笔记

学习笔记目录&#xff0c;这里记录个大纲&#xff0c;详情点链接 背包问题 01背包问题综述 01背包问题&#xff08;二维数组&#xff09;https://blog.csdn.net/m0_73065928/article/details/136794406?spm1001.2014.3001.5501 01背包问题&#xff08;滚动数组&#xff09…

S32 Design Studio 中断

中断向量表 中断数量可以在规格书里面看&#xff0c;也可以在SDK\platform\devices\S32K146\include\S32Kxxx.h里面看。 譬如我这个146芯片就有151个中断号 /** Interrupt Number Definitions */ #define NUMBER_OF_INT_VECTORS 151u /**< Number of inter…

Java基础知识总结(13)

数据结构 链表 优点&#xff1a;随机增删元素效率高&#xff08;因为增删元素不涉及到大量元素的位移&#xff09; 缺点&#xff1a;查询效率较低&#xff0c;每一次查找某个元素的时候都需要从头结点开始往下遍历 LinkedList集合 /* 链表的优点&#xff1a; 由于链表的元…

MySQL常用的聚合函数(比较常用滴~)

① 常用的聚合函数 count(col): 表示求指定列的总行数 max(col): 表示求指定列的最大值 min(col): 表示求指定列的最小值 sum(col): 表示求指定列的和 avg(col): 表示求指定列的平均值 ② 求总行数 – 返回非NULL数据的总行数 select count(height) from students; –…

OpenHarmony游戏应用程序-实现的一个手柄游戏

介绍 本篇Codelab是基于TS扩展的声明式开发范式编程语言&#xff0c;以及OpenHarmony的分布式能力实现的一个手柄游戏。 说明&#xff1a; 本示例涉及使用系统接口&#xff0c;需要手动替换Full SDK才能编译通过。 完成本篇Codelab需要两台开发板&#xff0c;一台开发板作为游…

C/C++一些重要的关键字

一、static关键字 1、修饰局部变量–静态局部变量 特点&#xff1a; 1.1、static修饰局部变量&#xff0c;会影响局部变量的生命周期&#xff0c;本质改变了局部变量的储存位置&#xff0c;生命周期变长&#xff0c;为整个周期&#xff0c;其作用域还是局部&#xff0c;静态…

6 修改主机名和HOSTS文件

后期我们会配置多台服务器&#xff0c;那么每台服务器我们都会给定一个主机名&#xff0c;方便后期通过主机名进行访问。主机名的修改我们可以在安装操作系统时对其修改&#xff0c;如果忘记了&#xff0c;就可以修改配置文件完成&#xff0c;像后期我们进行虚拟机克隆后&#…

(一)基于IDEA的JAVA基础5

Scanner的使用 使用scanner可以接收键盘上输入的数据&#xff0c; Scanner inputnew Scanner(System.in)&#xff1b; 导包的方式: 什么是导包&#xff0c;导入的是jdk提供的java开发工具包&#xff0c;我们建一个java文件&#xff0c;psvm快捷输入后&#xff0c;打上new S…

海边游艇港口迈入智能新纪元:数字孪生系统引领未来趋势

在浩瀚的海洋边&#xff0c;游艇港口不仅是停泊游艇的港湾&#xff0c;更是展现城市风貌与智慧科技的窗口。如今&#xff0c;随着数字化技术的飞速发展&#xff0c;海边游艇港口也迎来了前所未有的变革——数字孪生系统的应用&#xff0c;正悄然改变着传统游艇港口的运营模式&a…

C语言例3-33:从键盘输入一个正整数保存至int 型变量 num,输出由8~11构成的数(从低位、0号开始编号)

算法分析&#xff1a; 使变量num右移8位&#xff0c;将原来的8~11位移到低4位上构造一个低4位为1&#xff0c;其余位为0的整数&#xff08;0000 0000 0000 1111&#xff09;与变量num进行按位与运算 代码如下&#xff1a; #include<stdio.h> int main(void) {int num,…

js实现读取excel文件

1、引入js文件&#xff0c;如下 <script src"https://code.jquery.com/jquery-2.2.4.js"></script> <script src"https://cdn.bootcss.com/xlsx/0.15.1/xlsx.core.min.js"></script> 2、判断文件是否是excel文件 var url$(#exc…

复试专业前沿问题问答合集9——密码学

复试专业前沿问题问答合集9——密码学 网络安全中的密码学加密算法原理及基础知识问答: Q1: 对称加密算法是如何工作的? A1: 对称加密算法使用相同的密钥进行数据的加密和解密。这种加密方式的关键在于密钥的保密,因为任何拥有密钥的人都可以解密信息。对称加密算法速度快…

24计算机考研调剂 | 西北民族大学

西北民大数计学院【核医学数字图像工程】专业招收2名学术硕士调剂生 考研调剂招生信息 一、招生专业 工学->计算机科学与技术 二、调剂要求 1&#xff09;不限制本科出身&#xff0c;但要求一志愿报考985/211、双一流院校的计算机科学与技术及相关专业&#xff08;学硕&a…

【最后2天】京东云游戏云服务器0门槛抽奖送!云服务器选购推荐 京东云 阿里云 腾讯云对比 幻兽帕鲁 雾锁王国 省钱学生党

好消息&#xff1a;抽奖活动开启&#xff01;时间&#xff1a;3月17日——3月24日 最高奖品&#xff1a;16G 6个月&#xff1b;32G 3个月 抽奖规则&#xff1a;B站点赞评论关注即可参与抽奖&#xff0c;3.24日公布获奖名单。 抽奖地址&#xff1a; 【首次抽奖】16G、32G免费…

docker的部署与安装以及部署一个docker(容器)应用及docker容器常出现的问题

docker 架构图 一、docker的部署与安装 1、在 CentOS 上安装 Docker 移除旧版本&#xff08;如果有的话&#xff09;&#xff1a;sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-…

大模型时代,5个最顶级的向量数据库

介绍5个向量数据库。 大模型时代&#xff0c;向量数据库彻底的火了&#xff0c;今天我分享业内最频繁使用的向量数据库&#xff0c;更多实践经验&#xff0c;可以文末参加我们的技术落地的讨论&#xff0c;喜欢本文记得收藏、关注、点赞。 1 Chroma 使用ChromaDB构建LLM应用程…

C++ QT串口通信(3)-监听串口拔插(windows)

本文讲解Qt中的监听串口拔插适用于windows系统。 概述 监听串口的插入和拔出,需要使用QAbstractNativeEventFilter类,主要作用是捕获全局系统消息。 使用QSerialPortInfo类获得串口列表。 首先创建串口监听的类 #ifndef SERIALCHANGE_H #define SERIALCHANGE_H#include …

信雅纳400/800G网络测试仪之 CDF/ Extended Payload 功能:完全用户自定义的协议报文支持/可编程的协议内容支持

Note# 2024-3-21 今天被一个做芯片测试的客户追着问&#xff0c;应该合作在测试仪上做完全自定义的报文&#xff0c;添加自己的私有协议进去&#xff0c;他觉得每次都导入报头太麻烦了&#xff0c;然后就看了下Application Note关于CDF功能的描述&#xff0c;照着机翻的版本来…