米哈游笔试(4.3)
米哈游笔试(4.3 日 场)
选择题
我是个Java的,让我看指针(黑人问号)
编程题
第一题,是正则表达式的改编版(AC 80%)
public boolean isMatch(String s, String p) { if(p.isEmpty()) return s.isEmpty(); // 先判断我们的当前p第一个字符是不是( String temp = null; if(p.charAt(0) == '(') { temp = findStr(p); } // 说明有() boolean firstMatch; if(temp != null) { // 因为涉及到切割字符串,后面那部分就是比较当前一部分是否相等 firstMatch = (s.length() >= temp.length()) && (s.substring(0, temp.length()).equals(temp)); if(p.length() >= temp.length() + 3 && p.charAt(temp.length() + 2) == '*') { return (firstMatch && isMatch(s.substring(temp.length()), p)) || isMatch(s, p.substring(temp.length() + 3)); }else { return firstMatch && isMatch(s.substring(temp.length()), p.substring(temp.length())); } }else { // 剩下就是普通的了 firstMatch = !s.isEmpty() && (p.charAt(0) == s.charAt(0) || p.charAt(0) == '.'); if(p.length() >= 2 && p.charAt(1) == '*') { return (firstMatch && isMatch(s.substring(1), p)) || isMatch(s, p.substring(2)); }else { return firstMatch && isMatch(s.substring(1), p.substring(1)); } } } private String findStr(String str) { int index = 0; for(int i = 0; i < str.length(); i++) { if(str.charAt(i) == ')') { index = i; break; } } return str.substring(1, index); }
第二题,讲道理我看不太懂意思,直接 return 3 (AC 40%)
问答题
是玩家,定时器啥的,讲道理我也看不太懂, 我真的菜
public class AskQuestion { public static void main(String[] args) { Player player = new Player(); MyTimer myTimer = new MyTimer(); player.setMyTimer(myTimer); myTimer.registerEvent(new AddPowerTimeEvent()); while (true) { myTimer.tick(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } // 游戏角色 class Player { // 自身的能量 private int power; private MyTimer myTimer; public void setMyTimer(MyTimer myTimer) { this.myTimer = myTimer; myTimer.setTarget(this); } public void staimerPower() { power++; } } // 定时器 class MyTimer { // 检测主体 private Object target; private ArrayList<TimeEvent> events = new ArrayList<>(); public void setTarget(Object target) { this.target = target; } public void registerEvent(TimeEvent event) { events.add(event); } public void tick() { for(int i = 0; i < events.size(); i++) { TimeEvent event = events.get(i); event.doIt(target); } } } interface TimeEvent { // 判断当前是否合法 boolean canDo(); void doIt(Object obj); } class AddPowerTimeEvent implements TimeEvent { // 自定义规则 private long startTime; private long blue; @Override public boolean canDo() { // 达到时间范围 if(System.currentTimeMillis() - startTime >= blue) { return true; } return false; } @Override public void doIt(Object obj) { if(canDo()) { this.startTime = System.currentTimeMillis(); Player player = (Player) obj; player.staimerPower(); } } }#笔试题目##米哈游#