中易网

哪位大侠能用java程序实现下面的题目

答案:3  悬赏:20  
解决时间 2021-11-07 09:24
比酒量.txt
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
最佳答案
这道题可以这么来分解。
把整数'1'分解为以下形式。
1 = 1/a + 1/b + 1/c + 1/d,并且 0 < a, b, c, d < 20.,a,b,c,d都是整数。
a, b, c, d 代表每喝完一瓶酒后,剩余的海盗数量。
假设最开始海盗数量一共为x人,那么a = x, 那么海盗船长第一次喝了 1/x瓶酒
喝完第一瓶酒之后,还剩余b人,即第一次喝倒了x-b人,第二次海盗船长喝了1/b瓶酒。。。。
依次类推。海盗船一共喝了 1/x + 1/b + 1/c + 1/d = 1瓶酒。
写程序就这么写吧。
==============================
public class haidao {
public static void main(String[] args) {
int minPerson = 1;
double allPersons = 4;
while (allPersons <= 20) {
int firstPersons = minPerson;
while (firstPersons <= allPersons) {
int secondPersons = minPerson;
while (secondPersons <= allPersons - firstPersons) {
int thirdPersons = minPerson;
while (thirdPersons <= allPersons - firstPersons
- secondPersons) {
double captionDrinkedTotal = 1.0/allPersons
+ 1.0/(allPersons - firstPersons)
+ 1.0/(allPersons - firstPersons - secondPersons)
+ 1.0/(allPersons - firstPersons - secondPersons - thirdPersons)
- 1;
if (Math.abs(captionDrinkedTotal) < 0.00000001) {
System.out.print("海盗总数:" + allPersons);
System.out.print(" 第一次喝倒人数:" + firstPersons);
System.out.print(" 第二次喝倒人数:" + secondPersons);
System.out.println(" 第三次喝倒人数:" + thirdPersons);
}
thirdPersons++;
}
secondPersons++;
}
firstPersons++;
}
allPersons++;
}
}
}

==========
运行结果:
海盗总数:12.0 第一次喝倒人数:6 第二次喝倒人数:2 第三次喝倒人数:2
海盗总数:15.0 第一次喝倒人数:5 第二次喝倒人数:7 第三次喝倒人数:1
海盗总数:18.0 第一次喝倒人数:9 第二次喝倒人数:6 第三次喝倒人数:1
海盗总数:20.0 第一次喝倒人数:15 第二次喝倒人数:1 第三次喝倒人数:2
==========
PS:只要把minPerson = 1,改为 minPerson = 0,就可以允许某次喝酒没有海盗倒下。
全部回答
这个代码我就不说了 你看看我的思路 你写个 for(int i=1; i<20;i--){ if(i==j) break ; } 这样就第一瓶喝完了 下面你在想想
下面的代码在输出i的时候都犯了2个小错误,那就是i是从0开始的,所以如果检测到有该元素时,应该是第i+1个元素,第二个错误就是输出"无此数"该语句放在循环内的,那么执行一次for语句就会输出一次无此数,修改后最终代码如下: package mypkg; import java.util.scanner; public class mypkg {     public static void main(string[] args) {         int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};         scanner s = new scanner(system.in);         system.out.print("请输入:");         int n = s.nextint();         if (n >= 1 && n <= 10) {  //先判断输入的数字是否在1~9,如果在就检测是第几个,如果没在就直接输出无此数             for (int i = 0; i < a.length; i++) {                 if (a[i] == n) {                     int j = i + 1;                     system.out.println(n + "是数组中第" + j + "个元素");                 }             }         } else {             system.out.println("无此数");         }     } } 测试结果:
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
停车住宿(平顶山湛河区)地址有知道的么?有点
无烟火锅桌价格多少
孕妇可以吃芒果吗?会上火吗?
靓丽布艺怎么去啊,我要去那办事
洛阳偃师名淑美容店是否会骗人呀?
玄武门之变的参与者
离南京市江宁区麒麟镇最近的交通银行在哪里?
400亩地的光伏电站(山坡地)从基础砼到支架
梦见死老人 另外活着的老人 写死去老人 上
三星n7100怎么截屏
南昌黄金一钱等于多少克 具体的数字
好太太晒衣架怎样368
晚上睡觉的时候腿总抽筋是怎么回事
城乡规划局测绘管理股地址好找么,我有些事要
哪位清楚水电安装怎么预算
推荐资讯
我的宝宝3个月了,为什么一直拉稀便便
小孩睡觉易出汗,伴有汗味儿怎么办?
儿童语言的发育过程是什么?
导电鞋和防静电鞋有哪些不同?
厦门半包装修
禾秀养生馆地址好找么,我有些事要过去
孕妇耻骨疼影响顺产吗?趾骨疼是什么原因呢?
喝苹果醋对身体会有什么好处和坏处,宜多
iWatch好想要!上市了没!哪儿有卖?[花心][
奇瑞重工谷王烘干机质量怎么样?
沈家洲村地址有知道的么?有点事想过去
右后脑勺胀痛是为什么
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?