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

使用for循环求解给定数字区间内最小数位和的数字个数

修复区间内最小数位和数字计数函数

我正在完成一项任务,需找出区间[m, n]中拥有最小数位和的正整数的数量。已定义计算数位和的sum函数,但统计符合条件的数字数量时遇到问题。以下是编写的用于寻找最小数位和并计数的代码,希望得到修复帮助。
输入:1 100,输出:3

int minSum(int m, int n){
  
    for (int i=m; i<=n; i++){
        int sm=sum(i);
        if (sm<min) min=sm;
        if (min==sm)  cnt++;
    }
    return cnt;
}

问题分析

你的代码存在两个核心问题:

  • 变量min和cnt未初始化,会导致程序读取随机垃圾值,引发未定义行为
  • 逻辑顺序错误:当找到更小的数位和时,没有重置计数器,会导致计数结果错误

修复后的代码

int minSum(int m, int n){
    // 用区间第一个数初始化最小数位和与计数
    int min = sum(m);
    int cnt = 1;
  
    // 从第二个数开始遍历
    for (int i = m + 1; i <= n; i++){
        int sm = sum(i);
        if (sm < min) {
            // 找到更小的数位和,更新最小值并重置计数
            min = sm;
            cnt = 1;
        } else if (sm == min) {
            // 数位和等于当前最小值,计数加1
            cnt++;
        }
    }
    return cnt;
}

修复说明

  • 初始化min为区间第一个数的数位和,cnt初始化为1,避免未定义行为
  • 循环从m+1开始,减少一次重复计算
  • 调整分支逻辑:遇到更小的数位和时重置计数器,仅当数位和等于当前最小值时累加计数

针对输入1 100,数位和最小的是1,对应数字1、10、100,共3个,修复后的代码可正确输出3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:45:26