Java代码中maxSum控制台输出值异常原因问询
代码输出值的来源解析
当B取较小值(如99)时,输出等于B的原因
代码里的maxSum是全局变量,没有在每次计算子数组前重置。当累加过程中maxSum达到B后,后续所有的maxSum += C.get(k)操作都会触发if(maxSum>B)的判断,随即执行maxSum -= C.get(k)——相当于加了又立刻减掉,maxSum的值就固定在B不再变化,最终输出B。
当B取较大值(如999)时,输出843的原因
此时maxSum的累加不会触发if条件,它的最终值是数组中所有元素在三层循环里被累加的总次数乘以对应元素值的总和。
具体计算每个元素的被累加次数:
数组长度为9,索引从0到8。对于索引为m的元素,它会在以下场景被累加:
- 外层循环
i的取值范围是0到m,共m+1种可能 - 中层循环
j的取值范围是m到8,共9 - m种可能 - 内层循环
k遍历i到j,必然包含m
因此每个元素的累加次数为(m+1)*(9 - m),计算各元素的总贡献:
- 7(索引0):9次 → 7×9=63
- 1(索引1):16次 → 1×16=16
- 8(索引2):21次 → 8×21=168
- 5(索引3):24次 → 5×24=120
- 8(索引4):25次 → 8×25=200
- 5(索引5):24次 → 5×24=120
- 3(索引6):21次 → 3×21=63
- 3(索引7):16次 → 3×16=48
- 5(索引8):9次 → 5×9=45
将所有贡献相加:63+16+168+120+200+120+63+48+45=843,这就是最终输出的数值。
内容的提问来源于stack exchange,提问作者davecodes_029
相关产品推荐
相关产品推荐

