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");
}
}
}
}
}
}第二题做了两个多小时,后面的题没记下来。唉,接着学吧。
#网易笔试##网易互娱##笔试题目#
查看21道真题和解析
