百度3.29笔试算法题

题型:单选 + 多选 + 算法

(1) 乘法表的最大值

给出一个乘法表,现在有一个新的乘法表规则,输入 n 和 k, 取第 n 行中的前k个乘积反转的最大值(有点绕 直接看用例好理解一些)
例子:n = 8, k = 9 数据范围:(1 <= n, k <= 1000)
解释:第n行前k个数字的正常情况下的乘积为:
8, 16, 24, 32, 40, 48, 56, 64, 72
反转后的乘积
8, 61, 42, 23, 4, 84, 65, 46, 27
取反转后结果的最大值84

代码:(100%)

let input = readline(), n = +input[0], k = +input[1]
let calcReverseMaxNum = function (n, k) {
  let max = 0
  for (let i = 1; i < k; i++) {
    if(i * n < 10) {
      max = Math.max(max, i * n)
      continue
    }
    let val = i * n + "" 
    let ret = parseInt(Array.from(val).reverse().join(""))
    max = Math.max(max, ret)
  }
  return max
}

(2)找数对

给出一个t个N,实现f函数,找出符合条件数对数量, 就是说从N中找两个数(A 和 B),使得A * B == N, gcd(A,B) == 1
gcd(A, B) = 1
lcm(A, B) = A * B
例子:
输入:30
返回: 4
解释: 可以构成的数对为:(1, 30), (5, 6), (15, 2), (3, 10)
去重: 因为(1,30)数对已经有了, 就不能有(30, 1)了,后面同理

代码(100%)

let t = parseInt(readline()), line, arr = []
while (line = parseInt(readline())) arr.push(line)
// // 求最大公约数
let gcd = (a, b) => b ? gcd(b, a % b) : a;
let f = function (nums) {
  for (let i = 0; i < t; i++) {
    let k = Math.sqrt(nums[i]) // 只需要取一半就行,不然后面都是重复的计算会超时
    let ans = 0
    for (let j = 1; j < k; j++) {
      let a = nums[i] / j
      if (nums[i] % j == 0 && gcd(a, j) == 1) ans++
    }
    console.log(ans)
  }
}
f(arr)

(3)构造完美数

给出一个数,只包含1, 2, 3的数字称为完美数,如果当前数字不符合完美数的要求,那么返回可以构造的最大的不超过当前数字的完美数。
例子:1. 输入 213 => 返回 213
2. 输入 2244 => 返回 2233
3. 输入 3355 => 返回 3333
4. 输入 100 => 返回 33

代码(用贪心没做出来,自己输入一些测试用例都能过,提交过不了)

let n = parseInt(readline())

let line, arr = []
while (line = readline()) arr.push(parseInt(line))

let f = function (nums) {
  for (let i = 0; i < n; i++) {
    if (nums[i] <= 3 && nums[i] >= 1) {
      console.log(nums[i])
      continue
    }
    let num = "", curr = nums[i] + "", j = 0, len = curr.length, flag = false
    while (j < len) {
      if (flag) {
        num += 3;
        j++
        continue;
      }
      if (curr[j] > 3 || curr[j] == 0) {
        num += 3;
        flag = true
      } else if (curr[j] >= 1 && curr[j] <= 3) {
        num += curr[j];
      }
      j++
    }
    let val = parseInt(num)
    console.log(val > curr ? parseInt('3'.repeat(len - 1)) : val)
  }
}
f(arr)

#暑期实习##春招##实习##笔试题目##笔经##笔试时间##前端##百度#
全部评论
感谢分享,祝oc
1 回复 分享
发布于 2023-04-07 17:23 广东
感谢分享,楼主好强,有面试消息踢踢我呀,非常感谢
点赞 回复 分享
发布于 2022-03-30 15:32
好难😂楼主好强
点赞 回复 分享
发布于 2022-04-11 21:27
请问选择题都有哪些范围呢?
点赞 回复 分享
发布于 2022-04-12 13:33

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
点赞 评论 收藏
分享
双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
评论
4
10
分享
牛客网
牛客企业服务