哪位大侠能用java程序实现下面的题目
比酒量.txt有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复......直...
比酒量.txt
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。 展开
有一群海盗(不多于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,就可以允许某次喝酒没有海盗倒下。
把整数'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 ;
} 这样就第一瓶喝完了 下面你在想想
if(i==j) break ;
} 这样就第一瓶喝完了 下面你在想想
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-12-11
展开全部
这是今年“蓝桥杯”的初赛试题吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询