C语言解谜:六人捕鱼分鱼问题
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条鱼。
原文地址: https://www.cveoy.top/t/topic/oZuf 著作权归作者所有。请勿转载和采集!