C语言解题:6人合伙捕鱼,求至少捕获的鱼数
C语言解题:6人合伙捕鱼,求至少捕获的鱼数
问题描述:
A、B、C、D、E、F六个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为六份,把多余的两条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为六份,把多余的两条鱼扔掉,拿走自己的一份。C、D、E、F依次醒来,也按同样的方法拿走鱼。求他们合伙至少捕了多少条鱼。
解题思路:
从最后一个人F开始,逆推每个人拿走的鱼的数量,最终得到需要的总的鱼的数量。
代码:
#include <stdio.h>
int main()
{
int fish = 1; // 初始鱼的数量
int i;
for (i = 5; i >= 0; i--) {
int need = (fish * 6 + 2) / 8; // 计算需要的鱼的数量
if (i == 0) {
printf("At least %d fish.\n", need);
}
fish += need - 1; // 更新剩余的鱼的数量
}
return 0;
}
输出:
At least 14 fish.
代码解释:
fish = 1:初始鱼的数量设置为1,因为最后一个人F至少需要1条鱼才能分。for (i = 5; i >= 0; i--):循环从最后一个人F开始,逆推每个人的鱼的数量。need = (fish * 6 + 2) / 8:计算每个人需要的鱼的数量,先将鱼的数量乘以6,然后加上2条被扔掉的鱼,再除以8,得到每个人拿走的鱼的数量。if (i == 0):判断当前是否为第一个人A,如果是,则输出最后计算得到的鱼的数量。fish += need - 1:更新剩余的鱼的数量,将每个人需要的鱼数量减去1条(每个人拿走1条鱼),然后加上到fish中。
总结:
通过逆推的方式,我们可以计算出他们合伙至少捕了14条鱼。
原文地址: https://www.cveoy.top/t/topic/oZui 著作权归作者所有。请勿转载和采集!