Java编程求满足1+2+…+n>输入limit value的最小正整数n
求解满足累加和大于限值的最小正整数n的Java实现修正
需求说明
实现Java程序,输入一个正整数作为限值limit value,找到满足判定条件 1 + 2 + 3 + … + n > limit value 的最小正整数n。
已知规则示例:
- 输入限值为6时,正确n值为4,对应累加和为1+2+3+4=10>6
- 输入限值为7时,正确n值为4,对应累加和为1+2+3+4=10>7
原有代码问题排查
原有实现代码如下:
class LimitValue { public static void main(String[] args) { int n, sum, limit_value; Scanner scan = new Scanner(System.in); System.out.print("Enter limit value: "); limit_value = scan.nextInt(); n = 0; sum = 0; while (sum < limit_value) { sum = sum + n; n++; } System.out.println("n = " + n); } }
代码存在3个核心问题:
- 缺少
java.util.Scanner类的导入语句,代码无法直接编译运行 - 循环内执行顺序错误:初始n=0,第一次循环先执行
sum = sum +n时加的是0,属于无效计算,后续累加的顺序和n自增的顺序错位,导致n的计数比实际值偏大 - 循环判定条件不严谨:当累加和
sum等于限值时,仍然不满足sum > limit value的要求,需要继续累加,原有条件sum < limit_value在sum等于限值时会直接退出循环,边界场景计算错误
修正后的实现代码
调整循环执行顺序、修正边界判定、补全导入语句后的可运行代码如下:
import java.util.Scanner; class LimitValue { public static void main(String[] args) { int n, sum, limitValue; Scanner scan = new Scanner(System.in); System.out.print("Enter limit value: "); limitValue = scan.nextInt(); n = 0; sum = 0; while (sum <= limitValue) { n++; sum += n; } scan.close(); System.out.println("n = " + n); } }
逻辑说明
- 初始n和sum都置为0,只要sum还没有超过限值,就持续执行循环
- 每次循环先将n自增1,保证第一次累加的值为1,后续依次累加2、3、4……,不会出现加0的无效操作
- 自增n后将n的值加到sum上,再判断sum是否已经超过限值,满足条件则直接退出循环,此时的n就是要求的最小正整数
测试结果验证
修正后的代码运行所有测试用例结果均符合预期:
- 输入1,输出n=2,对应累加和1+2=3>1
- 输入2,输出n=2,对应累加和1+2=3>2
- 输入4,输出n=3,对应累加和1+2+3=6>4
- 输入5,输出n=3,对应累加和1+2+3=6>5
- 输入7,输出n=4,对应累加和1+2+3+4=10>7
- 输入10,输出n=5,对应累加和1+2+3+4+5=15>10
内容的提问来源于stack exchange,提问作者user19441115
相关产品推荐
相关产品推荐

