You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何找到序列1,5,10,50,100,…中不大于x的最大值?

解决方案

你思路是对的,只需要把5开头的序列元素生成逻辑补全就行,和10的幂次逻辑类似:

核心思路

  • 先拿到对应x的10的幂次值(就是你已实现的closestTo10返回的结果)
  • 把这个值乘以5,得到5开头序列的候选值
    • 如果候选值≤x,那它就是5开头序列里不大于x的最大值
    • 如果候选值>x,就把10的幂次除以10再乘以5(相当于降一个量级的5开头数)
  • 最后取10幂次值和5开头候选值的较大者,就是目标结果

代码实现

首先实现生成5开头序列最大值的函数:

int closestTo5(int value) {
    int powerOf10 = (int)Math.pow(10.0, Math.floor(Math.log10(value)));
    int candidate = powerOf10 * 5;
    if (candidate <= value) {
        return candidate;
    } else {
        // 处理value=1的情况,powerOf10/10会变成0,所以要确保返回至少1
        return Math.max((powerOf10 / 10) * 5, 1);
    }
}

然后整合两个函数得到最终结果:

int findMaxInSequence(int x) {
    int val10 = closestTo10(x);
    int val5 = closestTo5(x);
    return Math.max(val10, val5);
}

验证示例

我们用题目给的例子测试:

  • x=1:val10=1,val5=1 → 结果1 ✔️
  • x=9:val10=1,val5=5 → 结果5 ✔️
  • x=49:val10=10,val5=5 → 结果10 ✔️
  • x=52:val10=10,val5=50 → 结果50 ✔️

当然你也可以把逻辑合并到一个函数里,减少冗余:

int findMaxInSequence(int x) {
    double logVal = Math.log10(x);
    int exponent = (int)Math.floor(logVal);
    int power10 = (int)Math.pow(10, exponent);
    int candidate5 = power10 * 5;
    int max5 = candidate5 <= x ? candidate5 : Math.max((power10 / 10) * 5, 1);
    return Math.max(power10, max5);
}

内容的提问来源于stack exchange,提问作者tigrou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:14:55