• 牛客网 PAT 算法历年真题 1008 : 锤子剪刀布 (20)


    锤子剪刀布 (20)

    时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)

    题目描述

    大家应该都会玩“锤子剪刀布”的游戏:
    现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

    输入描述:

    输入第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


    思路分析:

    1.将输入的交锋信息遍历一遍,求出双方赢、平和负的次数,以及每个手势赢的次数;
    2.根据这些次数判断双方获胜次数最多的手势并输出。

    Java 代码如下:

    import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            Scanner sca = new Scanner(System.in);
            int n = sca.nextInt();
            String[][] arr = new String[n][2];
            int[] left = new int[3];
            int[] right = new int[3];
            int win = 0;
            int p = 0;
            int mistake = 0;
            for (int i = 0; i < arr.length; i++) {
                for (int j = 0; j < 2; j++) {
                    arr[i][j] = sca.next();
                }
            }
            
            //统计双方赢、平、输的次数
            for (int i = 0; i < arr.length; i++) {
                if(arr[i][0].equals("C")&&arr[i][1].equals("J") || arr[i][0].equals("J")&&arr[i][1].equals("B") || arr[i][0].equals("B")&&arr[i][1].equals("C")){
                    left = f(left,arr[i][0]);
                    win++;
                }else if(arr[i][0].equals("C")&&arr[i][1].equals("C") || arr[i][0].equals("J")&&arr[i][1].equals("J") || arr[i][0].equals("B")&&arr[i][1].equals("B")){
                    p++;
                }else{
                    right = f(right,arr[i][1]);
                    mistake++;
                }
            }
            System.out.println(win+" "+p+" "+mistake);
            System.out.println(mistake+" "+p+" "+win);
            str(left);
            System.out.print(" ");
            str(right);
        }
        
        //判断赢的手势并计数
        static int[] f(int[] arr,String str){
            if(str.equals("C"))
                arr[0]++;
            else if(str.equals("J"))
                arr[1]++;
            else if(str.equals("B"))
                arr[2]++;
            return arr;
        }
        
        //输出双方赢得最多的手势
        static void str(int[] arr){
            int max=0;
            String maxstr = "";
            String[] mm = new String[] {"C","J","B"};
            for (int i = 0; i < arr.length-1; i++) {
                for (int j = i+1; j < arr.length; j++) {
                    if(arr[i]<arr[j]){
                        max = arr[j];
                        arr[j] = arr[i];
                        arr[i] = max;
                        
                        maxstr = mm[j];
                        mm[j] = mm[i];
                        mm[i] = maxstr;
                    }
                }
            }
            if(arr[0]==arr[1]){
                if(arr[1]==arr[2]){
                    System.out.print("B");
                }else{
                    if(mm[0].compareTo(mm[1])>0){
                        System.out.print(mm[1]);
                    }else{
                        System.out.print(mm[0]);
                    }
                }
            }else{
                if(arr[1]==arr[2]){
                    System.out.print(mm[0]);
                }else{
                    System.out.print(mm[0]);
                }
            }
        }
    }
    作者:十八岁

    -------------------------------------------

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

  • 相关阅读:
    Revit扩展组件介绍之_AdWindow
    PropertyGrid使用总结5 UITypeEditor
    PropertyGrid使用总结4 IcustomTypeDescriptor
    PropertyGrid使用总结3 Descriptor
    PropertyGrid使用总结2 TypeConverter
    JavaScript之Ajax学习
    JavaScript正则表达式
    JavaScript面向对象学习笔记
    node入门学习1
    JavaScript随笔8
  • 原文地址:https://www.cnblogs.com/l199616j/p/10313555.html
Copyright © 2020-2023  润新知