米哈游笔试(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();
}
}
}#笔试题目##米哈游#

查看2道真题和解析