海盗比酒量(四重循环遍历)(有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶) |
您所在的位置:网站首页 › 一瓶牛二什么酒量 › 海盗比酒量(四重循环遍历)(有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶) |
题目描述
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复… 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。 等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“…昨天,我正好喝了一瓶…奉劝大家,开船不喝酒,喝酒别开船…” 请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。 如果有多个可能的答案,请列出所有答案,每个答案占一行。 格式是:人数,人数,…(勿加空格) 例如,有一种可能是:20,5,4,2,0 请给出包括以上答案(20,5,4,2,0)在内的所有可能的答案,每个答案占一行,输出顺序按照第1个数从小到大的顺序排列。 输入 没有输入。 输出 若干行数列,每一行5个整数,两两之间用逗号分隔。 上一行的第1个数应该小于下一行的第1个数。 注意:每一行最后一个数应该是0,且输出中只应该有整数、逗号、换行。不要在任何地方加空格。 思路简单分析,本来想用递归,发现不用那么拐弯抹角,直接四重循环遍历即可。 题目意思:每次必须都有喝醉的人,剩下的没喝醉的人平分一瓶酒,这样经过四轮,船长分得的酒加起来等于1瓶。 用四重循环来模拟四次的分酒。 值得关注的地方是,本题应该用高精度变量来模拟,避免出现差错与遗漏,并且可以将四个分数的加法,应用乘法变换一下,避免比较小数的困扰。 代码呈上; #include int main () { double a,b,c,d; double fen1,fen2,fen3,fen4; for(a=20;a>1;a--) { for(b=a-1;b>1;b--) { fen2=a/b; for(c=b-1;c>1;c--) { fen3=a/c; for(d=c-1;d>1;d--) { fen4=a/d; if(1+fen2+fen3+fen4==a) { printf("%.0f,%.0f,%.0f,%.0f\n",a,b,c,d); } } } } } return 0; }运行示例 不要忘记最后的答案每行都需要加一个0哦! |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |