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