滴滴前端笔试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
#滴滴##前端#
全部评论
编程2我也是45%,不知道啥问题😭
点赞 回复 分享
发布于 2022-09-17 17:43 天津

相关推荐

1 5 评论
分享
牛客网
牛客企业服务