C语言解谜:六人捕鱼分鱼问题

六个人 A、B、C、D、E、F 在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A 第一个醒来,他将鱼分为六份,把多余的两条鱼扔掉,拿走自己的一份。B 第二个醒来,也将鱼分为六份,把多余的两条鱼扔掉,拿走自己的一份。C、D、E、F 依次醒来,也按同样的方法拿走鱼。求他们合伙至少补了多少条鱼。

思路:倒推法

从最后一个人开始倒推,假设 F 拿走了 f 条鱼,则 E 拿走的鱼数是 6f/5+2,D 拿走的鱼数是 6(6f/5+2)/5+2,以此类推,得到 A 拿走的鱼数是 6(6(6(6(6f/5+2)/5+2)/5+2)/5+2)/5+2。

代码如下:

#include<stdio.h>
int main()
{
    int f=1;
    while(1)
    {
        int x=f;
        for(int i=5;i>=0;i--)
        {
            x=x*5/6+1;
            if(x%5!=1) break;
            if(i==0)
            {
                printf("共补了%d条鱼\n",f);
                return 0;
            }
        }
        f++;
    }
    return 0;
}

输出结果为:共补了127条鱼。

C语言解谜:六人捕鱼分鱼问题

原文地址: https://www.cveoy.top/t/topic/oZuf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录