2020/3/8 校招笔试题
题一
某一工人生产手机,假设第一天量产1台,接下来2天(即第二天、第三天)每天量产2台,接下来3天每天量产3台……以此类推,请编程计算处第n天总共可以量产的手机数量。
思路
用数组保存 1 到 n 天每天量产的数量,即 [1, 2, 2, 3, 3, 3, ...]
取前n项求和即可。
function solution(n) {
const arr = [];
let i = 1;
let j = 1;
let res = 0;
while (i <= n) {
for (let a = 1; a <= j; a++) {
arr.push(j);
i++;
}
j++
}
for (let b = 0; b < n; b++) {
res += arr[b];
}
return res;
}
题二
现给定任意正整数n,请寻找并输出最小的正整数 m(m>9),使得 m 的各位(个位、十位、百位……)之乘积等于n,若不存在则输出 -1.
思路
这道题就是寻找 n 的约数,从9到2,寻找约数,找到就加入约数数组里,并改变n为除以约数后的数。找完后,数组里的各项乘积应该正好等于n,将其从小到大排序,然后拼起来,就是最小的数了。另外做下特殊情况处理即可。
function solution(n) {
// write code here
let res = [];
let i;
while (n >= 10) {
i = 9
for (i = 9; i > 1; i--) {
if (Number.isInteger(n / i)) {
res.push(i);
n /= i;
break;
}
}
if (i === 1) {
return -1; // 9到2都没有约数
}
}
res.push(n); // 此时n成了个位数
res = res.sort((a, b) => a - b);
if (res.length === 1) {
return Number(`1${res[0]}`)
}
return Number(res.join(''));
}
题三
太难了!不会!