看了网上很多关于这个问题的分析,但没有一个通俗易懂的解释。
偶然看到一个分析的比较好的文章,经过验证,代码是正确的。
现在给出自己运行的源代码,并分析算法思路。
public static void monkeyPeaches(int monkeyNum) {
int i = 0; //猴子序号
int j = 1; //总桃子数
int k = 1; //剩余桃子数
while (true) {
k = j;
for (i = 0; i < monkeyNum; i++) {
if ((k - 1)%5 == 0) {
k = (k - 1)/5*4;
} else {
break;
}
}
if (i == monkeyNum && k > 0) {
break;
}
j++;
}
System.out.println("the peaches number is " + j);
}
代码中:i表示猴子序号,从0到monkey - 1。
j表示桃子总数,从数字1不断向上循环,知道找到满足要求的数量。
k表示剩余桃子数,每次循环后,剩余桃子数必须大于0。