比酒量

    xiaoxiao2021-03-25  96

    有一群海盗(不多于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; }这道题刚看时分析得时候少看了一个条件,就是船长刚好喝了一瓶的条件,最后条件缺失,得出的情况很多,

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

    转载请注明原文地址: https://ju.6miu.com/read-35849.html

    最新回复(0)