这么复杂的问题,用Java来写……只不过是考验算法了……
我计算了一下,应该只有一个答案: 6,3,2,1,0
不知道我的理解是否有偏差……
船长应该是喝了3轮就倒下了,而船长总共喝了1瓶。我写的程序是这样子的:
public final class Test {
public static void main(String[] args) throws InterruptedException {
int a; // 总人数
int b; // 第一轮之后,第二轮之前的人数
int c; // 第二轮之后,第三轮之前的人数
int d; // 第三轮之后,第四轮之前的人数
int e; // 第四轮之后的人数
/* result_up开头的,都是分子 , result_down开头的,都是分母 */
/* result_up1表示第一轮之后的分子,result_down1表示第一轮之后的分母, */
/* result_up1 / result_down1 表示第一轮之后,船长喝下的酒的总和相当于一瓶酒的几分之几 */
int result_up1;
int result_down1;
int result_up2;
int result_down2;
int result_up3;
int result_down3;
// 如果海盗船长在第四轮之前就倒下了,就不需要这2行代码了
// int result_up4;
// int result_down4;
for (int i = 20; i > 3; i--) {
a = i;
result_up1 = 1;
result_down1 = i;
for (int j = i - 1; j > 2; j--) {
b = j;
result_up2 = result_up1 * j + result_down1;
result_down2 = result_down1 * j;
for (int k = j - 1; k > 1; k--) {
c = k;
result_up3 = result_up2 * k + result_down2;
result_down3 = result_down2 * k;
for (int l = k - 1; l > 0; l--) {
d = l;
for (int m = l - 1; m > -1; m--) {
e = m;
// 如果海盗船长在第四轮之前就倒下了,就不需要这一行代码了
// result_up4 = result_up3 * k + result_down3;
// 如果海盗船长在第四轮之前就倒下了,就不需要这一行代码了
// result_down4 = result_down3 * k;
/* 判断海盗船长是否总共喝够一瓶 */
if (result_up2 == result_down2 || result_up3 == result_down3
// 如果海盗船长在第四轮之前就倒下了,就不需要这一行代码了
// || result_up4 == result_down4) {
) {
System.out.print(a + "," + b + "," + c + "," + d + "," + e + " ");
System.out.println("true");
}
}
}
}
}
}
}
}
嗯,如果还有什么疑问,可以+ Q,470372-243(去掉-)
解析看不懂?求助智能家教解答查看解答