当前位置: 首页 > 面试经验 >

滴滴前端笔试9.17

优质
小牛编辑
134浏览
2023-03-28

滴滴前端笔试9.17

题型:选择20 编程2

写在前面:

  1. 没有解题,只有纯暴力解法...(仅做记录用...
  2. 具体题目描述懒得打了,可以搜其他帖子

编程1:二进制加密(73%)

let y = parseInt(read_line());   // 表示处理后的数

function fn1(n) {
let res = [];
const len = [...n.toString(2)].length;
for (let i = 1; i < len; i++) {
// i表示二进制中1的个数
if (n % i === 0) {
let temp = n / i;
if (helper(temp) === i) {
res.push(temp);
}
}
}
res.sort((a, b) => a-b);
return {
len: res.length,
res: res,
}
}

// 这个函数就是在计算y(x)
function helper(num) {
// 获取二进制个数
let ret = 0;
for (let i = 0; i < 32; i++) {
if ((num & (1 << i)) !== 0) {
ret++;
}
}

return ret;
}

const {len, res} = fn1(y);
console.log(len);
console.log(res.join(' '));

// 73%

编程2: 实验数据(45%)

题目提示以下信息:

  1. 这个数是正整数,且没有前导零(即数的最高位不是0)
  2. 这个数任意两个相邻数位的数字不同
  3. 这个数可以被3整除
const str = read_line();  // 包含?的数字
console.log(fn2(str));
function fn2(str) {
const arr = [...str];

// 思路先构造,再去调整可以被3整除
/*
三个地方处理:
1. 两个特殊位置:索引为0和str.length-1处
2. 中间位置

中间位置最复杂:
1) 1 ? 2 ===> 1 0 2
2) 0 ? 1 || 1 ? 0
3) 0 ? 2 || 2 ? 0 || 0 ? ?
4) 0 ? 0 ===> 0 1 0
*/

for (let i = 0; i < arr.length; i++) {
if (arr[i] === '?') {
if (i === 0) {
arr[i] = arr[i + 1] === '1' ? '2' : '1';
} else if (i === arr.length - 1) {
arr[i] = arr[i - 1] === '0' ? '1' : '0';
} else { // 复杂情况
// console.log(arr[i - 1], arr[i + 1])
if (arr[i - 1] !== '0' && arr[i + 1] !== '0') {
arr[i] = '0';
} else if (arr[i - 1] === '0' && arr[i + 1] === '0') {
arr[i] = '1';
} else if (arr[i - 1] === '0' && arr[i + 1] !== '0') {
if (arr[i + 1] === '1') {
arr[i] = '2'
} else {
arr[i] = '1'
}
} else if (arr[i - 1] !== '0' && arr[i + 1] === '0') {
if (arr[i - 1] === '1') {
arr[i] = '2'
} else {
arr[i] = '1';
}
}
}
} else {
continue;
}
}
// arr.map(item => parseInt(item));
// let sum = arr.reduce((p, v) => p+v);
let res = Number(arr.join(''));
// console.log(res)
if (res % 3 === 0) {
return res;
} else {
let remainer = 3 - res % 3;
return res + remainer;
}
}

// 45
#滴滴##前端#
 类似资料: