【Java】【PAT】Basic Level 1018 锤子剪刀布

news2024/10/6 6:49:47

题目 1018 锤子剪刀布

作者 CHEN, Yue

单位 浙江大学

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

FigCJB.jpg

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

输入格式:

输入第 1 行给出正整数 N(≤105),即双方交锋的次数。随后 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代码

Java代码在本地测试通过,但是在PTA平台上会超时。

其中,对石头剪刀布的裁判逻辑,考虑到“BCJ”三个字符两两相减得到的数值不同,因此可以用这一点来分类讨论。总共有9种情况,其中三种平局的情况可以归为一类。

/*
功能:根据两人猜拳记录,统计出胜负数据。
*/
import java.io.*;
class Main{
    public static void main(String[] args) throws IOException{
        //接收输入
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine().trim());    //读取猜拳次数
        //声明变量
        int[] a = new int[6];    //甲方胜、负、平的次数,及B、C、J胜出的次数
        int[] b = new int[6];    //乙方胜、负、平的次数,及B、C、J胜出的次数
        char[] arr = new char[3];    //每一次的出拳情况,0甲方,2乙方
        //在线处理
        for(int i=0;i<n;i++){
            arr = br.readLine().toCharArray();    //读取本次出拳情况并存入数组
            switch(arr[0]-arr[2]){    //甲方出拳减去乙方出拳
                case 0:        //平局
                    a[2]++;
                    b[2]++;
                    break;
                case 'B'-'C':
                    a[0]++;    //甲方胜
                    b[1]++;
                    a[3]++;
                    break;
                case 'B'-'J':
                    a[1]++;
                    b[0]++;
                    b[5]++;
                    break;
                case 'C'-'B':
                    a[1]++;
                    b[0]++;
                    b[3]++;
                    break;
                case 'C'-'J':
                    a[0]++;
                    b[1]++;
                    a[4]++;
                    break;
                case 'J'-'B':
                    a[0]++;
                    b[1]++;
                    a[5]++;
                    break;
                case 'J'-'C':
                    a[1]++;
                    b[0]++;
                    b[4]++;
                    break;
            }//switch
        }//for
        //输出结果
        String resA = a[0] + " " + a[2] + " " + a[1];
        String resB = b[0] + " " + b[2] + " " + b[1];
        System.out.println(resA + "\n" + resB);
        char charA,charB;
        if(a[3]>=a[4] && a[3]>=a[5])    //若a[3]为最大值
            charA = 'B';
        else if(a[4]>=a[5])    //若a[4]为最大值
            charA = 'C';
        else                    //若a[5]为最大值
            charA = 'J';
        if(b[3]>=b[4] && b[3]>=b[5])    //若b[3]为最大值
            charB = 'B';
        else if(a[4]>=a[5])    //若b[4]为最大值
            charB = 'C';
        else                    //若b[5]为最大值
            charB = 'J';
        System.out.print(charA + " " + charB);
    }//void main
}//class Main


C语言代码

我把上面的Java代码改成了C语言代码,基本逻辑不变,主要是修改输入输出语句,测试通过。

/*
功能:根据两人猜拳记录,统计出胜负数据。
*/
#include <stdio.h>
#include <string.h>

int main() {
    int n; // 猜拳次数
    scanf("%d", &n);
    int a[6] = {0}; // 甲方胜、负、平的次数,及B、C、J胜出的次数
    int b[6] = {0}; // 乙方胜、负、平的次数,及B、C、J胜出的次数
    char chA,chB; // 每一次的出拳情况,chA甲方,chB乙方
    for(int i = 0; i < n; i++) {
        getchar();        //清除换行符
        scanf("%c %c", &chA,&chB); // 读取本次出拳情况
        switch(chA - chB) { // 甲方出拳减去乙方出拳
            case 0: // 平局
                a[2]++;
                b[2]++;
                break;
            case 'B'-'C':
                a[0]++; // 甲方胜
                b[1]++;
                a[3]++;
                break;
            case 'B'-'J':
                a[1]++;
                b[0]++;
                b[5]++;
                break;
            case 'C'-'B':
                a[1]++;
                b[0]++;
                b[3]++;
                break;
            case 'C'-'J':
                a[0]++;
                b[1]++;
                a[4]++;
                break;
            case 'J'-'B':
                a[0]++;
                b[1]++;
                a[5]++;
                break;
            case 'J'-'C':
                a[1]++;
                b[0]++;
                b[4]++;
                break;
        } // switch
    } // for

    // 输出结果
    printf("%d %d %d\n", a[0], a[2], a[1]);
    printf("%d %d %d\n", b[0], b[2], b[1]);
    char charA, charB;
    if(a[3]>=a[4] && a[3]>=a[5])     // 若a[3]为最大值
        charA = 'B';
    else if(a[4]>=a[5])     // 若a[4]为最大值
        charA = 'C';
    else                 // 若a[5]为最大值
        charA = 'J';
    if(b[3]>=b[4] && b[3]>=b[5]) // 若b[3]为最大值
        charB = 'B';
    else if(b[4]>=b[5])     // 若b[4]为最大值
        charB = 'C';
    else                 // 若b[5]为最大值
        charB = 'J';
    printf("%c %c", charA, charB);
    return 0;
}

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

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

相关文章

Python 中的函数包装器:模型运行时和调试

一、说明 在Python中&#xff0c;函数包装器被称为装饰器&#xff0c;它们在数据科学中具有各种有用的应用。本指南介绍如何使用它们来管理模型运行时和调试。 二、函数的封装 函数包装器是用于修改函数行为的有用工具。在Python中&#xff0c;它们被称为装饰器。装饰器允许我们…

设计模式:建造者模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《策略模式》 下一篇《适配器模式》 简介&#xff1a; 建造者模式&#xff0c;它是一种对象构建模式&#xff0c;它提供了一种构建对象的最佳方式。这种模式适用于当对象的构建过程需要涉及到多个部分&#xff…

观察者模式 vs 发布-订阅模式:两种设计模式的对决!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一…

设备标识牌不锈钢二维码制作

一、设备标识牌二维码好处&#xff1a; 1、设备信息管理&#xff1a;传统标识牌容纳的信息有限&#xff0c;将二维码用于设备标识牌&#xff0c;可实现设备信息丰富展示、设备文档资料可存储二维码云端、微信扫码检查查阅&#xff0c;无需携带纸质&#xff0c;同时凡尔码云端后…

JSX 动态类名控制

学习目标&#xff1a; 根据需求判断是否显示某个类名的样式 实现&#xff1a; 使用三元表达式或逻辑&&运算 import ./app.css; function App() {const color1 trueconst color2 truereturn (<div className"App">1. 三元&#xff1a;<div classN…

android项目实践说明

权限与存储 本地读取文件&#xff08;IO流&#xff09; 网络传输&#xff08;Socket通信&#xff09; 串口通信&#xff08;串行传输接口通信&#xff09; 而串口通信是应用在智能家居和单片机通信的场景&#xff0c;人脸识别门禁&#xff0c;利用串口控制门开关&#xff0…

SHELL基础编程

文章目录 SHELL基础查看有哪些解释器使用usermod修改用户解释器BASH基本特性 shell脚本的设计与运行编写问世脚本脚本格式规范执行shell脚本方法一方法二实验 变量自定义变量环境变量位置变量预定义变量 变量的扩展运用多种引号的区别双引号的应用单引号的应用反撇号或$()的应用…

leetcode 29

dividend 和 divisor都是int 类型&#xff0c;返回值也是int类型&#xff0c; 在C中&#xff0c;int类型表示整数类型&#xff0c;其范围取决于具体的实现。通常情况下&#xff0c;int类型的范围为-2147483648到2147483647&#xff0c;即-231到231-1。这是因为int类型通常为32…

Fwupd 1.9.6 Linux 固件升级工具已于近日发布

导读Fwupd 1.9.6 Linux 固件升级工具已于近日发布&#xff0c;支持更多硬件设备、新功能和十几处错误修复。 Fwupd 1.9.6 是在 fwupd 1.9.5 发布一个月后推出的&#xff0c;它引入了对更多硬件设备的支持&#xff0c;包括 AMD dGPUs Navi3x 及更高版本、Star Labs StarBook Mk …

假脸检测:Exploring Decision-based Black-box Attacks on Face Forgery Detection

论文作者&#xff1a;Zhaoyu Chen,Bo Li,Kaixun Jiang,Shuang Wu,Shouhong Ding,Wenqiang Zhang 作者单位&#xff1a;Fudan University;Yiwu Research Institute of Fudan University 论文链接&#xff1a;http://arxiv.org/abs/2310.12017v1 内容简介&#xff1a; 1&…

GeoServer改造Springboot源码二(数据源管理设计)

一、界面设计 图 1数据源管理列表 图 2选择数据源类型 1、PostGis 图 3新增PostGis数据源 2、Shapefile

Delay问题分析

【在刚刚过去的SAFe Scrum Master课程上有学员提出了Delay问题&#xff0c;进行了重点分析&#xff0c;颇有意义&#xff0c;因此整理得到本文】 大致背景情况&#xff1a;To B软件开发&#xff0c;已经启用了敏捷开发&#xff0c;迭代周期2周。 问题&#xff1a;经常出现Del…

因修改 MySQL 复制账号密码导致主从复制中断

作者 | JiekeXu 来源 |公众号 JiekeXu DBA之路&#xff08;ID: JiekeXu_IT&#xff09; 如需转载请联系授权 | (个人微信 ID&#xff1a;JiekeXu_DBA) 大家好&#xff0c;我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看因修改 MySQL 复制账号密码导致主从复制异常&am…

Go语音中并发介绍

Go 是一种并发语言&#xff0c;而不是并行语言。在讨论 Go 中如何处理并发之前&#xff0c;我们必须首先了解什么是并发以及它与并行有何不同。 什么是并发&#xff1f; 并发性是指同时处理很多事情的能力。最好用一个例子来解释。 让我们考虑一个人慢跑。假设他早上慢跑时&…

电子画册如何制作,教你几分钟简单上手制作?

电子画册不同于纸质画册&#xff0c;它可以不受时间、空间及地域的限制&#xff0c;以更直观、新颖的形式展示在读者面前&#xff0c;还能快速传播效益。所以&#xff0c;当下&#xff0c;越来越多人想要用电子画册来传递内容信息。 如何制作电子画册&#xff1f;其实只要使用…

GoLong的学习之路(六)语法之指针

书接上回&#xff0c;上回书中写道&#xff0c;数组已经和java中数组的区别。在go中数组的是数值类型&#xff0c;故需要指针指向数组的地址&#xff0c;从而进行修改。这次诉说&#xff0c;指针 文章目录 指针指针地址new和makenewmake 指针 区别于C/C中的指针&#xff0c;G…

公立医院绩效考核系统源码,能适应医院多种绩效核算方式,技术架构:springboot、mybaits +avue +MySQL

医院绩效考核系统源码 &#xff0c;绩效核算系统全套成品源码&#xff08;有医院项目应用案例&#xff09;可适应医院多种绩效核算方式。 系统概述&#xff1a; 医院绩效考核管理系统是采用B/S架构模式设计、使用JAVA语言开发、后台使用MySql数据库进行管理的一整套计算机应用…

从零开始学习wpsjs

1.这是一个简单的wpsjs学习文档&#xff0c;我是边学习wpsjs边记录学习的&#xff0c;希望对您的学习有所帮助 开发事项&#xff1a; 全局安装wpsjs:npm install -g wpsjsWpsjs create HelloWps 安装wps npm install -g wpsjs 新建一个wps加载项 输入命令wpsjs create HelloW…

代码随想录算法训练营第三十一天丨 贪心算法part02

122.买卖股票的最佳时机 II 思路 本题首先要理清楚两点&#xff1a; 只有一只股票&#xff01;当前只有买股票或者卖股票的操作 想获得利润至少要两天为一个交易单元。 #贪心算法 这道题目可能我们只会想&#xff0c;选一个低的买入&#xff0c;再选个高的卖&#xff0c;…

LoongArch 指令集实验exp6

在借鉴了友佬的代码后&#xff0c;终于是跑通了测试。 1. 2. 4. 5. 6. 还需要改一个&#xff08;&#xff09; assign sr64_result {{32{op_sra & alu_src1[31]}}, alu_src1[31:0]} >> alu_src2[4:0]; //rj >> i5