船长喝酒问题--Java实现

版权声明:071623 https://blog.csdn.net/weixin_43584220/article/details/88926308
/**
*有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。
*再打开一瓶酒平分,又有倒下的,再次重复...... 直到  
*开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
*
*   等船长醒来,发现海盗船搁浅了。他在航海日志中写到:
*   “......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”
*
*    请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
*    如果有多个可能的答案,请列出所有答案,每个答案占一行。
*
*/
//船长喝了4次,4次喝的酒量刚好是一瓶
package cn.LanQiaoBeiAlgorithm.Ravanla;

public class CaptainDrink {
	public static void main(String[] args) {
		for(int a = 20; a >= 1; a--)
			for(int b = a-1; b >= 1; b--)
				for(int c = b-1; c >= 1; c--)
					for(int d = c-1; d >= 1; d--) {
//						if(1/a + 1/b + 1/c + 1/d == 1)
//System.out.println(a + "," + b + "," + c + "," + d);

//						if((Math.abs(1.0/a + 1.0/b + 1.0/c + 1.0/d - 1.0) < 1E-6))
//System.out.println(a + "," + b + "," + c + "," + d);
						
						//化简分母    其实这样可以写出一个化简分母的方法   
						//让每次遇到不同分母都能化简好
						if(b*c*d + a*c*d + b*a*d + b*c*a == b*c*d*a)
						System.out.println(a + "," + b + "," + c + "," + d);
//						结果
//						20,5,4,2
//						18,9,3,2
//						15,10,3,2
//						12,6,4,2

					}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43584220/article/details/88926308