一题选手绝不轻易弃疗!!! 第一题(金币摔落 10 分) 可能是网易担心我得零分,100分的卷子给了我10分。 题目描述 题干很长,可以简单理解为:游戏角色每死亡一次,身上的金币数量G会变为G/2(上取整)。求角色连续死亡N次身上剩余的金币数。 【输入】 5(代表下面的输入个数)7 212 210 27 220 3 【输出】 4 因为 7/2 上取整为46323 【菜鸡代码 AC】 输入参数的范围分别为: import java.util.ArrayList;import java.util.Scanner;public class test041101 {    public static void main(String[] args){        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        long money = 0;        long death = 0;        Solution01 solution01 = new Solution01();        ArrayList<Long> list = new ArrayList<>();        for(int i = 0; i < n; i++){            money = sc.nextInt();            death = sc.nextInt();            list.add(solution01.remaining(money,death));        }        for(long num :list) {            System.out.println(num);        }    }}class Solution01{    long remaining(long money, long death){        if(money < 0){            return 0;        }        if(death < 1){            return money;        }        double ret = Double.valueOf(money);        long ret1 = 0;        while(death-- > 0){            ret1 = (long)(ret/2+0.5);            ret = ret1;        }        return ret1;    }}这道题需要注意一下死亡次数可能是0,我在这卡了15分钟,一直是0%的通过率,差点重拾零题选手的荣誉称号。 第二题(顺子牌压缩 15分) 题目描述 题干很长,可以简单理解为:一副扑克牌,没有大小王。J对应11,Q对应12,K对应13,A对应1,其他就对应各自的数值。方块(diamonds, 用d简写,输入时也是d,下同)加成数为0,梅花(clubs, 用c简写)加成数为13,红桃(hearts, 用h简写)加成数为26,梅花(spades, 用s简写)加成数为39。这样一张牌的实际价值为:数值+加成数。例如:方块3 = 3 + 0 = 3;红桃4 = 4 + 26 = 30。连续价值的牌称为“顺子牌”,如1、2、3、4,其他为“单牌”如:8、9。题目要求我们先牌的价值升序排列,然后压缩顺子牌,即保留顺子牌的首尾牌,再输出。如:1、2、3、4,变为1、4输出。单牌保持不变。 【输入】 11(代表下面的输入个数)3 d2 d7 d8 dA d4 dK d2 cQ dA cA h 【输出】 A d4 d7 d8 dQ d2 cA h 【菜鸡代码 0%】望各位大佬在评论区指点,不胜感激! 我的思路很简单,将输入转化为数字==>排序==>去除连续的数字==>再打印出来。但基本功太差,输入总报下标越界。 import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.Scanner;public class test041102 {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        String num = "";        char num1 = ' ';        char num2 = ' ';        int num11 = 0;        int num22 = 0;        int sum = 0;        ArrayList<Integer> list1 = new ArrayList<>();        ArrayList<Integer> list2 = new ArrayList<>();        HashMap<Character,Integer> map = new HashMap<>();        map.put('J',11);        map.put('Q',12);        map.put('K',13);        map.put('A',1);        HashMap<Integer,Character> map2 = new HashMap<>();        map2.put(11,'J');        map2.put(12,'Q');        map2.put(13,'K');        map2.put(1,'A');        for (int i = 0; i < n; i++) {            num = sc.next();            num1 = num.charAt(0);            num2 = num.charAt(2);            switch (num1) {                case 'J':                    num11 = 11;                    break;                case 'Q':                    num11 = 12;                    break;                case 'K':                    num11 = 13;                    break;                case 'A':                    num11 = 1;                    break;                default:                    num11 = Integer.valueOf(num, 0);            }            switch (num2) {                case 'd':                    num22 = 0;                    break;                case 'c':                    num22 = 13;                    break;                case 'h':                    num22 = 26;                    break;                case 's':                    num22 = 39;                    break;                default:                    num22 = -1;            }            sum = num11 + num22;            list1.add(sum);            Collections.sort(list1);            int[] sort = new int[list1.size()];            int j = 0;            for(int x : list1){                sort[j++] = x;            }            for(int p1=0,p2=1; p2 < sort.length; ){                list2.add(sort[p1]);                while(sort[p2+1] -sort[p2] == 1){                    p2++;                }                list2.add(p2);                p1 = p2+1;                p2 = p1+1;            }            for(int y : list2){                if(y > 0 && y <= 13){                    if(y>1 && y < 11){                        System.out.println(y+" "+"d");                    }else{                        System.out.println(map2.get(y)+" "+"d");                    }                }else if(y<=26){                    y = y % 13;                    if(y>1 && y < 11){                        System.out.println(y+" "+"d");                    }else{                        System.out.println(map2.get(y)+" "+"d");                    }                }else if(y<=39){                    y = y % 26;                    if(y>1 && y < 11){                        System.out.println(y+" "+"d");                    }else{                        System.out.println(map2.get(y)+" "+"d");                    }                }else{                    y = y % 39;                    if(y>1 && y < 11){                        System.out.println(y+" "+"d");                    }else{                        System.out.println(map2.get(y)+" "+"d");                    }                }            }        }    }}第二题做了两个多小时,后面的题没记下来。唉,接着学吧。
点赞 1
评论 0
全部评论

相关推荐

牛客21331815...:像我一投就pass,根本不用焦虑泡池子
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务