比酒量

有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。


    等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”


    请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。


    如果有多个可能的答案,请列出所有答案,每个答案占一行。


    格式是:人数,人数,...


    例如,有一种可能是:20,5,4,2,0

/*
分析: 
四瓶酒,最后一瓶时,人都倒下了。
4<=n<=20
n,a,c,d,e 分别代表船的人数,第一次喝醉的人,第二次喝醉的人,第三次喝醉的人,第四次喝醉的人 
1/n+1/n-a+1/n-a-b+1/n-a-b-c
==1  这是判断船长喝了一瓶酒的条件 

(n-a)*(n-a-b)*(n-a-b-c)+n*(n-a-b)*(n-a-b-c)+n*(n-a)*(n-a-b-c)+n*(n-a)*(n-a-b)
==n*(n-a)*(n-a-b)*(n-a-b-c)  上式的去分母得到的等式 

还有就是a+b+c+d==n的判断 
*/
#include<stdio.h>
int main()
{
	 int a,b,c,d,n;
	 for(n=4;n<=20;n++)
	  for(a=1;a<=(n-3);a++)
	   for(b=1;b<=(n-3);b++)
	    for(c=1;c<=(n-3);c++)
	     for(d=1;d<=(n-3);d++)
		 {
		    if(a+b+d+c==n&&((n-a)*(n-a-b)*(n-a-b-c)+n*(n-a-b)*(n-a-b-c)+n*(n-a)*(n-a-b-c)+n*(n-a)*(n-a-b)==n*(n-a)*(n-a-b)*(n-a-b-c))
)
		    printf("%d,%d,%d,%d,%d\n",n,n-a,n-a-b,n-a-b-c,0);
		 }
	return 0;	
}
这道题刚看时分析得时候少看了一个条件,就是船长刚好喝了一瓶的条件,最后条件缺失,得出的情况很多,

后来才知道题目看错了,在看题目的时候一定要读清题意。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值