题面
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复… 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“…昨天,我正好喝了一瓶…奉劝大家,开船不喝酒,喝酒别开船…”。
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
如果有多个可能的答案,请列出所有答案,每个答案占一行。
格式是:人数,人数,…
例如,有一种可能是:20,5,4,2,0
题解
枚举
由题可知,总共喝完四瓶酒,所有人都倒下了,船长喝满了四轮,则设每轮的开始人数为 a, b, c, d, 0,而船长刚好喝了一瓶酒,则有式子:
由于除法可能会造成误差,将其变换为乘法:
则接下来直接遍历a, b, c, d即可,同时需注意, a <= 20(海盗人数不超过20人), 之后每一轮的人数至少比前一轮少一(每一轮都有人倒下)。
答案:
20 5 4 2 0
18 9 3 2 0
15 10 3 2 0
12 6 4 2 0
代码
#include<iostream>
using namespace std;
int main() {
for (int a = 20; a; --a) {
for (int b = a - 1; b; --b) {
for (int c = b - 1; c; --c) {
for (int d = c - 1; d; --d) {
int s = b * c * d + a * c * d + a * b * d + a * b * c;
int t = a * b * c * d;
if (s == t) {
cout << a << " " << b << " " << c << " " << d << " " << 0 << endl;
}
}
}
}
}
return 0;
}
标题: | 2012年第三届蓝桥杯省赛-C.比酒量 |
---|---|
链接: | https://www.fightingok.cn/detail/154 |
更新: | 2022-09-18 22:43:35 |
版权: | 本文采用 CC BY-NC-SA 3.0 CN 协议进行许可 |