4.11网易互娱笔试

一题选手绝不轻易弃疗!!!

第一题(金币摔落 10 分)

可能是网易担心我得零分,100分的卷子给了我10分。

题目描述

题干很长,可以简单理解为:游戏角色每死亡一次,身上的金币数量G会变为G/2(上取整)。求角色连续死亡N次身上剩余的金币数。

【输入】

5(代表下面的输入个数)
7 2
12 2
10 2
7 2
20 3

【输出】

4 因为 7/2 上取整为4
6
3
2
3

【菜鸡代码 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 d
2 d
7 d
8 d
A d
4 d
K d
2 c
Q d
A c
A h

【输出】

A d
4 d
7 d
8 d
Q d
2 c
A 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");
                    }
                }
            }

        }
    }
}

第二题做了两个多小时,后面的题没记下来。唉,接着学吧。

#网易笔试##网易互娱##笔试题目#
全部评论

相关推荐

09-29 11:19
门头沟学院 Java
点赞 评论 收藏
分享
09-29 17:44
已编辑
蔚来_测(准入职员工)
//鲨鱼辣椒:见不了了我实习了四个月上周再投筛选了一天就给我挂了
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务