考虑两个变量:
“n”是任意值。
“i”是某个值在达到“n”值之前在总和中增加的次数。
例如,如果选择值 n = 344,则 i = 26,因为:
26 + 25 + 24 + ... + 3 + 2 + 1 = 351
26 是变量“i”在等于 n = 344 或第一次超过之前按降序添加的次数。
public class Trstuff{
public static void main (String [] arg) {
int n = 4;
int i = computeIndex(n);
System.out.print(i);
}
public static int computeIndex(int n) {
int i = 1;
int sum = 0;
for(i = 1; sum <= n; i++) {
sum = sum + i;
}
return i;
}
}
我的目标是选择任意“n”值,然后让程序将变量“i”返回给我。
就我的程序而言,我认为它应该是正确的,但不知何故它不是。这是 n = 4 的示例。
结果应该是“i = 3”,因为:
1 + 2 = 3
1 + 2 + 3 = 6
因此,由于循环中的表达式“sum <= n”,循环中“i”的升序值在循环应该停止之前被添加了 3 次。
但是,当我运行该程序时,它返回值 4。我根本不明白出了什么问题,为什么我的程序给了我 4 而不是正确答案 3?
最佳答案
读取for循环如下:
for every value of i while sum smaller or equal to n, add i to sum and increment i
行和增量i
的最后部分在sum + i
之和之后执行,但在检查sum是否小于或等于的下一个检查之前执行n,结果 i 总是比预期大 1。
解决方案可能是使用不同的导出(存在不同的解决方案):
public static int computeIndex(int n) {
int i = 1;
int sum = 0;
while true {
sum = sum + i;
if sum<n {
i++;
} else break;
}
return i;
}
关于java - 计算一个数字与自身相加多少次直到达到任意值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52960564/