09-02 美团秋招测试开发笔试

1、进制转化(92.31%)

调了半天以为是int不够,改成long也没ac,有ac的老哥可以说下,感觉我的思路太复杂了,代码也确实臭

已知各种进制的前缀是:

  • 二进制的前缀是0b/0B
  • 八进制的前缀是0
  • 十进制的前缀是无
  • 十六进制的前缀是0x或者0x

我们现在输入是一个由英文字母和数字组成的字符串,宇符串里可能是不同的进制,请输出这个宇符串转化后代表的十进制数字。 如果转化失败的话,输出error。

输入描述:输入一行字符串

输出描述:输出代表的十进制数字。如果转化失败的话,输出error。

package meituan_0902;


import java.util.Scanner;

// 92.31%
public class code1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        if (s.startsWith("0b") || s.startsWith("0B")){
            // 二进制
            if (s.length() >= 3){
                try {
                    System.out.println(Long.parseLong(s.substring(2), 2));
                }catch (NumberFormatException e){
                    System.out.println("error");
                }
            }else System.out.println("error");
        } else if (s.startsWith("0x") || s.startsWith("0X")){
            // 十六进制
            if (s.length() >= 3){
                try {
                    System.out.println(Long.parseLong(s.substring(2), 16));
                }catch (NumberFormatException e){
                    System.out.println("error");
                }
            } else System.out.println("error");

        } else if (s.startsWith("0")) {
            // 八进制
            if (s.length() >= 2){
                try {
                    System.out.println(Long.parseLong(s.substring(1), 8));
                }catch (NumberFormatException e){
                    System.out.println("error");
                }
            } else System.out.println("error");
        } else {
            try {
                System.out.println(Long.parseLong(s));
            }catch (NumberFormatException e){
                System.out.println("error");
            }
        }
    }
}

卡牌游戏(AC)

小美在玩一个好评如潮的卡牌游戏,游戏里有很多的卡牌,每张卡牌都有一个点数。

小美正在玩一个武将,这个武将的技能是:若当前使用牌的点数严格小于上一张牌,则摸一张牌(使用第一张牌时无法摸牌)。

小美只记得她摸了n张牌,且每次摸牌时候的点数为ai,但是小美不记得她的出牌顺序是什么了,只记得出牌数量不超过 2 x n,她想知道,她可能的出牌序列是什么,如果有多种答案,输出任意一种即可。

例如,摸牌时候的点数是 a=[2,1,5,4],那么小美的出牌顺序可以为[3,2,1,6,5,4]。

小美第一次出牌是3,第二次是2,小美可以摸牌,同时记录下2。第三次出牌是1,小美可以摸牌,同时记录下1。第四次是6,不可以摸牌。第五次是5,小美可以摸牌,同时记录下5。第六次是4,小美可以摸牌,同时记录下4。

符合小美的摸牌时候的点数a= [2,1,5,4]。

小美可以的出牌顺序也可以为[3,2,1,11,12,5,4],在这种出牌情况下,小美的摸牌的点数同样为a=[2,1,5,4]。

输入描述:第一行输入一个整数 ,表示摸牌数量。 第二行输入几个整数 a(1 < a;<10°5)表示摸牌序列。

输出描述: 第一行输出一个整数m 表示小美的出牌数量,你输出的 m 的大小不能超过2×n。 第二行输出 m 个整数表示小美的出牌序列,每一张牌的点数必须小于 2 x 10°9

示例1 输入输出示例仅供调试,后台判题数据一般不包含示例 输入 3 321

输出 5 4 3 2 10 1

说明

  1. 使用第1张牌后,无法摸牌。
  2. 使用第2张牌后,由于这张牌的点数3,小于上一张牌的点数4,所以可以摸牌。
  3. 使用第3张牌后,由于这张牌的点数2,小于上一张牌的点数3,所以可以摸牌。
  4. 使用第4张牌后,由于这张牌的点数10,大于上一张牌的点数2,所以不可以摸牌。
  5. 使用第5张牌后,由于这张牌的点数1,小于上一张牌的点数10,所以可以摸牌,

因此这个出牌序列符合摸牌序列。

package meituan_0902;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

//AC
public class code2 {
    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        List<Integer> res = new ArrayList<>();
        int lastOne = 0;
        for (int i = 0; i < n; i++) {
            int num = sc.nextInt();
            if (i == 0) {
                lastOne = num + 1;
                res.add(num + 1);
                res.add(num);
            } else if (lastOne <= num){
                res.add(num + 1);
                res.add(num);
                lastOne = num;
            } else {
                lastOne = num;
                res.add(num);
            }
        }
        System.out.println(res.size());
        for (int i = 0; i < res.size(); i++) {
            if (i == 0) System.out.print(res.get(i));
            else System.out.print(" " + res.get(i));
        }

    }
}

最多的高兴天数(AC)

小美有很多的彩虹糖,每颗彩虹糖都有一个颜色,她每天可以吃两颗彩虹 糖,如果今天吃的彩虹糖组合是之前没吃过的组合,则小美今天会很高兴。

例如,小美有 6 颗彩虹糖,颜色分别是1,1,1,4,5,1,4。 小红第一天吃一组颜色为1和 4 的彩虹糖,小美会很高兴; 第二天吃一组颜色为 4 和1的彩虹糖,小美不会很高兴; 第三天小美吃一组颜色为1和5的彩虹糖,小美会很高兴,此时小美共有2天很高兴。

小美想知道,她最多有几天会很高兴。

输入描述

第一行输入一个整数 n表示彩虹糖数量。 第二行输入n个整数表示彩虹糖颜色 a

输出描述

输出一个整数表示答案。

示例1 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

6

114514

输出

3

第1天吃一组颜色为1,4的彩虹糖。

第2天吃一组颜色为4,5的彩虹糖

第3天吃一组颜色为1,1的彩虹糖

package meituan_0902;

import java.util.Scanner;

// AC
public class code3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < nums.length; i++) {
            nums[i] = sc.nextInt();
        }
        System.out.println(n/2);
    }
}

#美团##测试开发##秋招#
全部评论
笑死,最后一题输出个n/2直接过😅
1 回复 分享
发布于 2023-09-03 02:47 重庆
强啊哥 我第二题半个小时没读懂脑子抽了没看第三题 就a了第一题 结果后面发现第三题可以骗分😣,第一题我就简单分类加判断就a了 int应该是够用的
点赞 回复 分享
发布于 2023-09-03 19:47 四川
信也科技
校招火热招聘中
官网直投

相关推荐

5 14 评论
分享
牛客网
牛客企业服务