分鱼问题——越分越少的鱼

分鱼问题

A、B、C、D、E这5个人合伙夜间捕鱼,凌晨时都已经疲惫不堪,于是各自在河边的树丛中找地方睡着了。第二天日上三竿时,A第一个醒来,他将鱼平分为5份,把多余的一条扔回河中,然后拿着自己的一份回家去了;B第二个醒来,但不知道A已经拿走了一份鱼,于是他将剩下的鱼平分为5份,扔掉多余的一条,然后只拿走了自己的一份;接着C、D、E依次醒来,也都按同样的办法分鱼。问这5人至少合伙捕到多少条鱼?每个人醒来后所看到的鱼是多少条?

解答

分析

假设5个人合伙捕了x条鱼,则A走之后,还剩下4(x-1)/5条鱼。
这里实际包含了一个隐含条件:假设Xn为第n(n=1、2、3、4、5)个人分鱼前鱼的总数,则(Xn-1)/5必须为正整数,否则不合题意,即(X-1)mod5=0。且每个人走之后,都是剩下4(Xn-1)/5条鱼。所以应该有下面等式:
X4=4(X5-1)/5
X3=4(X4-1)/5
X2-4(X3-1)/5
X1=4(X2-1)/5
则只要知道一个人的值就可以知道其他所有人的值。题目中只要求至少的条数,所以在得到第一个答案时退出循环。

题目有多种解法,在这里只给出其中一种。

代码

#include<stdio.h>
int main(){
    int a,b,c,d,e;
    for(a=6;;a+=5){
        b=4*(a-1)/5;
        c=4*(b-1)/5;
        d=4*(c-1)/5;
        e=4*(d-1)/5;
        if(b%5==1&&c%5==1&&d%5==1&&e%5==1){
            printf("sum:%d\n",a);
            printf("a:%d b:%d c:%d d:%d e:%d",a,b,c,d,e);
            break;
        }
    }
    return 0;
}

运行结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值