有一群海盗(不多于20人)c语言,JAVA问题,代码怎么写呢?谁能写得出?有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有...

这么复杂的问题,用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(去掉-)

解析看不懂?求助智能家教解答查看解答

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值