使用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
相关产品推荐
相关产品推荐

