PTA 1018 锤子剪刀布(详解+代码) AC

在这里插入图片描述
解析:读完题,我想下这些情况都只能一个一个写,这道题主要问题还是超时,如果用Scanner是绝对超时的,建议能用IO流用IO流,真的快!我们用IO流读取了甲和乙的出拳,进行比较,分为甲赢和乙赢俩种大情况,再细分出的什么,创建一个数组用来存石头剪刀布的次数,题目说是相等按字母顺序输出,所以我们创建的数组就是BCJ这样的顺序。后面靠最大数量的索引来输出胜利最多的手势方便。
注意注意注意!不要用字符串equals()方法来比较!!我最开始就是用String数组来存,再用equals来比较,总是超时,后来借鉴别人的用的字符数组才通过的。

public class Pta_1018 {
    static int[] j = new int[3];//"B","C","J" 212
    static int[] y = new int[3];//002
    static String[] res = {"B", "C", "J"};

    public static void main(String[] args) throws IOException {
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        int time = Integer.parseInt(buf.readLine());
        //System.out.println(time+"*");
        int l=0;//甲赢
        int w=0;//乙赢
        int balence=0;
        for (int i = 0; i < time; i++) {
            char []ch=buf.readLine().toCharArray();
            char jia = ch[0];
            char yi = ch[2];
            //甲乙胜利的情况
            if (jia=='C' && yi=='J' || jia=='J' && yi=='B' || jia=='B' && yi=='C') {
                l++;
                if (jia=='B') {
                    j[0]++;
                }
                if (jia=='C') {
                    j[1]++;
                }
                if (jia=='J') {
                    j[2]++;
                }
            }else if(jia=='J' && yi=='C' || jia=='B' && yi=='J' || jia=='C' && yi=='B'){
                w++;
                if (yi=='B') {
                    y[0]++;
                }
                if (yi=='C') {
                    y[1]++;
                }
                if (yi=='J') {
                    y[2]++;
                }
            }
            else balence++ ;
        }
        System.out.println(l + " " +balence + " " + w);
        System.out.println(w + " " + balence + " " +l);
        int maxj = 0;
        int maxy = 0;
        //找胜利最多的手势
        for (int i = 1; i < 3; i++) {
            if (j[i] > j[maxj]) {
                maxj = i;
            }
        }
        for (int i = 1; i < 3; ++i) {
            if (y[i] > y[maxy]) {
                maxy = i;
            }
        }
        System.out.println(res[maxj] + " " + res[maxy]);
        buf.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值