PAT 乙级 1018 锤子剪刀布 Java解决(未AC)

1018 锤子剪刀布 (20分)【java超时已解决】 题解 根据逻辑大家应该能写的出来,主要是有一个测试用例 java超时,解决思路如下: 我目前已知并且能够使用的最快IO流就是 StreamTokenizer in =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out)); 这是不超时... 阅读详情

写在最前:欢迎批评,欢迎任意地方的指正,用你们的优秀的java代码砸死我吧!!

问题——————

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

FigCJB.jpg

现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

输入格式:

输入第 1 行给出正整数 N(≤10​5​​),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。

输出格式:

输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3 行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。

输入样例:

10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J

输出样例:

5 3 2
2 3 5
B B

解题思路:

逻辑还是比较简单的,这道题一样是考虑速度问题,java撑死最后一个超时,我个人没有办法再进行优化了,网上也没有找到20分得java代码(如果有麻烦评论,谢谢了)。写法想要简单的话就可以使用两个map存储对应锤子剪刀布的胜利次数,这个循环的判断没有办法使用排序一类的东西去解决,只能考虑每种结果,如果有更好的思路麻烦提供下,再次感谢,循环输入后再挨个检查,把胜利的结果放进对应赢家的map中去,最后进行个map的值排序然后输出即可。

package not.die.in.here;

import java.io.*;
import java.util.*;
import java.util.Map.Entry;

public class _1018_Punch {
	public static char[] judge(char[] c) {//传入的是读入的每一行的字符串转化成的字符数组,所以中间会存在一个空格
		if( (c[0]=='C'&c[2]=='J')||
			(c[0]=='J'&c[2]=='B')||
			(c[0]=='B'&c[2]=='C') ){
			char[] result = {'A',c[0]};//甲胜利,返回胜利者,返回胜利手势
			return result ;
		}else if( (c[2]=='C'&c[0]=='J')||
				(c[2]=='J'&c[0]=='B')||
				(c[2]=='B'&c[0]=='C') ){
			char[] result = {'B',c[2]};//同上
			return result ;
		}else {
			return null;//平
		}
	}
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new  BufferedReader(new InputStreamReader(System.in));
		int num = Integer.parseInt(br.readLine());
		//建立好两个map存放数据
		Map<Character,Integer> A = new TreeMap<Character,Integer>(); 
		A.put('C', 0);
		A.put('J', 0);
		A.put('B', 0);
		Map<Character,Integer> B = new TreeMap<Character,Integer>();
		B.put('C', 0);
		B.put('J', 0);
		B.put('B', 0);
		char[][] buf = new char[num][];//二维字符数组存放读入的数据
		int temp = 0;
		for(int i=0;i<num;i++) {
			buf[i] = br.readLine().toCharArray();//循环读取
		}
		br.close();//关闭资源
		//这里害怕边读取边处理会拖慢速度,所以使用了两个循环。。不过好像两种方法的差别不太大,无非就是把两个循环放一起
		for(int i=0;i<num;i++) {
			buf[i] =judge(buf[i]);//直接用判断后的数据覆盖原始数据,反正也不会再次使用了,减少存储空间
			if(buf[i]!=null) {
				switch(buf[i][0]) {//判断赢家
				case 'A':{
					temp = A.get(buf[i][1])+1;
					A.put(buf[i][1], temp);//增加胜利次数
					break;
				}
				case 'B':{
					temp = B.get(buf[i][1])+1;
					B.put(buf[i][1], temp);
					break;
				}
				}
			}
		}
		int Awin = A.get('B')+A.get('C')+A.get('J'); //计算总胜利次数
		int Bwin = B.get('B')+B.get('C')+B.get('J');
		System.out.println(Awin+" "+(num-Awin-Bwin)+" "+Bwin);//根据甲乙的胜利次数可以得到所有的结果
		System.out.println(Bwin+" "+(num-Awin-Bwin)+" "+Awin);
		//值排序
		List<Entry<Character,Integer>> listA = 
				new ArrayList<Entry<Character,Integer>>(A.entrySet());
		Collections.sort(listA,(o1,o2)->o2.getValue()-o1.getValue());//逆序
		List<Entry<Character,Integer>> listB = 
				new ArrayList<Entry<Character,Integer>>(B.entrySet());
		Collections.sort(listB,(o1,o2)->o2.getValue()-o1.getValue());
		System.out.println(listA.get(0).getKey()+" "+listB.get(0).getKey());//输出两个map的第一位即最大数
		
		
		
	}
}

提交截图:

PAT乙级-题解(Java) 我的题解放在github仓库了(喜欢的话,记得star哈) 下面是汇总导航,如果你只想看其中某个题的话,点击题解直达。 乙级的题目每个题都是一个有趣的故事,引导你去思考解决问题的能力,不是单纯的刷题。然后只涉及数组,循环,判断,字符串等基础编程语言语法的知识,不会设计复杂的算法与数据结构。 一开始可能会有点吃力,正常,但是如果你全部刷完,leetcode上部分简单题对你来说是小case了。 甲级主要是算法与数据结构,乙级刷完了,也可刷甲级, 甲级的题目特别好,测试用例丰富 如果是急需找工作,面试的话刷lee 阅读详情

相关推荐

PAT Basic Level 1018. 锤子剪刀布 (20) 及最后一个测试点运行超时问题解决

1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什

睡得香吃得好胆子大的专栏 2000

1018 锤子剪刀布

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 N(≤10​5),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。 输出格式: 输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔

清风微醺的博客 322

PAT 1018 锤子剪刀布 python (有超时)

1018 锤子剪刀布 (20)(20 分) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第1行给出正整数N(&lt;=10^5^),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布...

Raaay的博客 487

PAT 1018 锤子剪刀布 (20 分) Java实现

https://github.com/salmon1802/PAT_B import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * @date 2021-8-11 - 21:57 * Created by Salmon */ public class Main1018 { public static void main(String[] args) th

Salmon1122的博客 298

石头剪刀布JAVA程序

可以在java平台上运行的一款小游戏.. 石头剪刀布, 对手是你的电脑...

MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据

1. 概述 MAX31855为热电偶至数字输出转换器,内置14位模/数转换器(ADC)。器件带有冷端补偿检测和修正、数字控制器、SPI兼容接口,以及相关的控制逻辑,在温度控制器、过程控制或监测系统中设计用于配合外部微控制器(μC)工作。提供多个版本的器件,每个版本针对特定的热电偶类型(K、J、N、T或E型)进行优化和调整。热电偶类型以器件型号后缀表示(例如MAX31855K)。 器件输出14位...

睿思派克 1万+

【JAVA】PAT 乙级 1018 锤子剪刀布(样例5超时,牛客网通过)

【JAVA】PAT 乙级 1018 锤子剪刀布(样例5超时,牛客网通过) 网页链接 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 N(≤10​5​​ ),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C...

TAL_DARIM的博客 341

PSM-DID实战指南:Stata代码解析与案例应用

本文详细解析PSM-DID方法在Stata中的实战应用,从理论到代码实现全面覆盖。通过倾向得分匹配(PSM)和双重差分(DID)的结合,有效解决政策评估中的选择偏差问题。文章提供完整的Stata命令代码、样例数据处理技巧和案例应用,帮助研究者准确评估政策效果。

vulkan6gpu的博客 795

1018 锤子剪刀布 (20 分)(超时问题没解决)

1018 锤子剪刀布 (20 分) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 N(≤10​5​​ ),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,...

u013933005的博客 633

22、硬件工程师笔试面试——电机(2025版本)

例如,B级绝缘的电机可以承受的最高温度为130℃,而H级绝缘的电机可以承受高达180℃的温度。同时,也要考虑电机的成本和控制系统的复杂性。电机的选择取决于其应用的具体要求,包括所需的功率、速度、扭矩、效率、成本和工作环境等。根据电动机保护配置原则,为电机配置适当的保护,如过负荷保护、缺相保护、逆相保护、接地漏电保护、堵转保护、相不平衡保护、短路保护、过电压保护、低电压保护、过热保护等。根据安培环路定理,电流和磁场的相互作用会在电机的转子上产生力,这些力作用于转子上,使其绕轴旋转,从而产生转矩。

XU157303764的博客 3539

国产化操作系统shell常用脚本

国产操作系统常用脚本:统信、麒麟。

Reyn_观极 598

PAT-乙级题库划水体验(JAVA)-1018

1018 锤子剪刀布 (20分) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 N(≤10​^5​​),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第...

qq_43215234的博客 425

(ICLR 2025)【源码讲解+复现】TIMER-XL: Long-Context Transformers for Unified Time Series Forecasting

本文提出了一种统一的多变量时序预测模型Timer-XL,其核心创新包括:1)采用自回归解码器架构,将多变量时序预测统一为next-token预测问题;2)设计TimeAttention机制,通过相对位置编码和因果掩码捕获时序位置和变量间交互;3)支持长上下文预训练以提升零样本迁移能力。模型架构包含嵌入层、时间感知注意力块和预测头,采用MSE损失进行端到端训练。实验表明该方法在多种时序任务上表现优异,特别是在长跨度预测和少样本场景下。代码实现提供了完整的模型定义、数据加载和训练流程,支持自定义配置参数。

1146

浙大PAT 乙级(题号1016~1020)自解全AC Java | Python | C++实现

1016、部分A+B(分数15) 1017、A除以B(分数20) 1018、锤子剪刀布(分数20) 1019、数字黑洞(分数20) 1020、月饼(分数25)

weixin_53024141的博客 603

2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器

12v / 24v智能模拟高侧MOSFET栅极驱动器。2ED2410-EM具有输入CPP和CPN的电压比较器。该比较器可用于基于任何模拟电压触发SAFESTATE模式,甚至是外部电压2ED2410-EM。CPP为比较器的正输入,CPN为负输入。VcPREF可以通过微控制器进行调节,也可以通过板载电源芯片(如英飞凌SBC)或简单的分压器在限制VcP(REF)内进行固定,以保持稳定性。使用此比较器允许2ED2410-EM进入SAFESTATE并独立于微控制器关闭MOSFET。

让学习成为一种习惯 2194

【ARFoundation自学04】AR Tracked Image 图像追踪识别与对应类的调用

1.添加组件 2.创建图像识别库 3.创建识别后追踪的物体(UI、模型等)

leoysq的博客 2560

PAT乙级1018,附题目解析和代码注释

1018 锤子剪刀布 (20分) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mPEAjWgv-1619358972875)(https://uploader.shimo.im/f/SqgVbhlcSVooVgyV.png!thumbnail?fileGuid=9XkkpYK9dCK8twyC)] 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最

优快云_Lrcx的博客 394

基于Python的雪球网投资组合数据爬取与分析实战:从入门到精通

在当今数字化投资时代,数据已成为投资者最重要的资产之一。雪球网作为中国领先的投资社交平台,汇聚了大量优质的投资组合数据,这些数据对于量化投资研究和个人投资决策具有重要价值。本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的雪球网投资组合爬虫,并深入分析获取的数据。投资组合持仓明细及变动历史投资收益率曲线与风险指标投资者操作策略与调仓频率热门行业与个股关注度。

2201_76125261的博客 920

PAT乙级——1018(模拟判胜负)

题目:锤子剪刀布 (20 分) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 N(≤10​5),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 ...

熊仙森滴Blog 924

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

浙大PAT 乙级(Basic Level) Practice 题解合集(全AC版)

写下这篇是为了记录一下在暑假这段时间里从零开始自解的PAT乙级基础题。

weixin_53024141的博客 1132

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

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

PAT 1018 锤子剪刀布(JAVA)

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 N(≤105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,...

qq_37774375的博客 549

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

1018 锤子剪刀布 (20分)(Java 题解)

1018 锤子剪刀布 (20分) 原题链接:传送门 一、题目: 输入样例 1: 10 C J J B C B B B B C C C C B J B B C J J 输出样例 1: 5 3 2 2 3 5 B B 二、解析: 思路:   先得出A赢的总次数和B赢的总次数,再得出AB所有手势中赢的最大值次数。按JCB顺序遍历一下找出最大(因为如果次数相同需要打印字母序小的,所以才需要按照...

长生的梦呓 1218

1018 锤子剪刀布(20 分) java

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 N(≤10​5​​),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 ...

深印我心的博客 1364

浙江大学PAT (Basic Level) Practice (中文)1018锤子剪刀布JAVA实现代码及分析

1018 锤子剪刀布 这道题我觉着只能一次一次判断和记录甲方和乙方出手的状态和胜负,最后按照题目要求的格式进行记录数据的输出。但是用JAVA写成我这个样子的话有一个测试点超时过不去 ,这道题我也没用C++按照同样的逻辑再写一次,但是我觉着我这个逻辑上没什么问题,有大佬有更好的解法的话欢迎在评论区指点小生一下。 具体实现代码如下: import java.util.Scanner; publi...

yingYing_monster的博客 498

Java(详解) 1018 锤子剪刀布 (20 分)

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 N(≤10 ​5 ​​ ),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2...

NewGe6的博客 736

1018 锤子剪刀布(C语言版 + 注释 + 复杂映射)

现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 N(≤10​5​​),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。 输出格式: 输出第 1、2 行分别给出...

YelloJesse的博客 857
上一篇: PAT 乙级 1017 A除以B Java解决
下一篇: PAT 乙级 1019 数字黑洞 Java解决
TimothyHTY
博客等级 码龄9年 16粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值