华为OD --- 靠谱的车

华为OD --- 靠谱的车

题目

OJ用例

测试用例case

独立实现

思路

独立实现的思路比较简单,直接建一个长度为N的数组,然后找出index中不包含4的项数即可

源码

js 复制代码
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // 输入实际付费的钱
    const payCount = Number(await readline());
    // const payCountList = new Array(payCount).fill(1)
    let numberIn4 = 0

    for (let i = 1; i <= payCount; i++) {

        if(`${i}`.includes(4)){
            numberIn4 ++
        }
    }

    console.log(payCount - numberIn4)
})();

tips 未通过全部用例 部分用例超时

参考实现

思路

其实看题目有想过是进制的解法,但是之前了解的进制都是满n进1,但是没有碰到这种满n+1的算法

算法思路如下
看位数是否大于进制数,如果大于 则当前位-1乘以进度的当前位次方,如果不大于则直接用当前位乘以进度的当前位次方

可能比较抽象,这里举两个🌰

这题的进制数是4 进度是9

以100为🌰

1 < 4 用1 * 9^2 = 81

0 < 4 用0 * 9^1 = 0

0 < 4 用0 * 9^0 = 0

最终得出81

再以501为🌰

5 > 4? (5 - 1) * 9 ^2 = 324

0 > 4? 0 * 9 ^1

1 > 4? 1 * 9 ^0 = 1

最终得 325

源码实现

js 复制代码
 const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // 输入实际付费的钱
    const payCount = await readline();
    let result = 0
    for (let i = 0 ; i < payCount.length; i++) {
        result += payCount[i] > 4 ? (payCount[i] - 1) * Math.pow(9, payCount.length - i - 1) : payCount[i]  * Math.pow(9, payCount.length - i - 1)
    }
    console.log(result)
})();
相关推荐
塔中妖15 小时前
【华为OD】分割数组的最大差值
数据结构·算法·华为od
塔中妖1 天前
【华为OD】数字游戏
算法·游戏·华为od
熊文豪2 天前
【华为OD】找出通过车辆最多颜色
算法·华为od
塔中妖2 天前
【华为OD】环中最长子串2
算法·华为od
熊文豪3 天前
【华为OD】区块链文件转储系统
算法·华为od·区块链
塔中妖3 天前
【华为OD】Linux发行版的数量
linux·算法·华为od
熊文豪3 天前
【华为OD】阿里巴巴找黄金宝箱
算法·华为od
塔中妖3 天前
【华为OD】5G网络建设
网络·5g·华为od
塔中妖3 天前
【华为OD】查找接口成功率最优时间段
算法·链表·华为od
塔中妖3 天前
【华为OD】最大子矩阵和
算法·华为od·矩阵