用的赛码系统,前端题型是30道单选(非常杂,有计算机基础知识吧、行测一类的逻辑推理题、就是没有前端的HTML、css、js。可以说没法准备) + 编程题2道 + 附加题(一个写作题,没有分,没来得及写)
- 做完就报名重考了,还得受一遍折磨!
- 看草稿感觉梦回高中了
编程题
1. 魔法送外卖,骑手有 n 个订单,每个订单需要时间 t 配送,每个订单有一个截止时间;骑手来不及送到订单可以用魔法瞬间送达,不算时间,问最少需要使用几次魔法才能把所有订单准时送达。
- 这题只A了55%,思路没问题。后来看大家的做法,应该是赛码网的输入的问题。各买家的截至时间是以字符串形式提供的,每个值用空格分开,而read_line()最多读取1024长度的字符串`,可能出现了很长的字符串没有读完的情况所以,`处理输入的方式`应该是:let line= gets(10000000),不妨取大一点!
- 笔试是ACM模式,这里只写了核心代码
calc_MagicTimes(6, 5, [5, 6, 7, 8, 9, 10]) // 4
function calc_MagicTimes(n, t, arr) {
let index = 0,
magicTimes = 0,
costTime = 0;
while (arr[index] != null) {
// 看当前的外卖是否来得及送
while (costTime + t > arr[index]) {
magicTimes++;
index++;
}
// 这个可以手动送了
costTime += t;
index++;
}
console.log(magicTimes);
}
2. 还原扑克牌,一副牌n张把第1、2张放到牌底,翻开第三张,并记录其值,然后丢掉该张;按这种做法不断翻牌记录,当只剩一张时直接记录。根据最后的记录结果,还原原来扑克牌的顺序
- 我只隐约觉得这里有啥规律,像是栈?`也想着逆操作回去,但是怎么逆呢?`后来一个一个试了36%
- 看了别人的逆操作方法,但还是想不清楚为啥是这样
function recoveCards(arr) {
if(arr.length < 3) {
return arr.join(' ');
} else {
let res = [];
for(let i = arr.length - 1; i >= 0; i--) {
// 这就是逆操作要做的事情
res.unshift(arr[i]);
res.unshift(res.pop());
res.unshift(res.pop());
}
return res.join(" ");
}
}
console.log(recoveCards([1, 2, 3, 4]));
#美团##美团笔试#