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张牌后,无法摸牌。
- 使用第2张牌后,由于这张牌的点数3,小于上一张牌的点数4,所以可以摸牌。
- 使用第3张牌后,由于这张牌的点数2,小于上一张牌的点数3,所以可以摸牌。
- 使用第4张牌后,由于这张牌的点数10,大于上一张牌的点数2,所以不可以摸牌。
- 使用第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);
}
}
#美团##测试开发##秋招#