猴子摘桃

本文通过编程解决了一个经典的数学问题——五只猴子如何分一堆桃子。每只猴子都重复同样的过程:将桃子分成五份,吃掉多余的一个,并拿走其中一份。文章提供了一段C语言代码,通过枚举法高效地找到了猴子们至少摘了多少个桃子及最后剩余的数量。

五只猴子一起摘了一堆桃子,因为太累了,它们商量决定,先睡一觉再分。一会其中的一只猴子来了,它见别的猴子没来,便将这堆桃子平均分成5份 ,结果多了一个,就将多的这个吃了,并拿走其中的一份。一会儿,第2只猴子来了,他不知道已经有一个同伴来过,还以为自己是第一个到的呢,于是将地上的桃子堆起来,再一次平均分成5份,发现也多了一个,同样吃了这1个,并拿走其中一份。接着来的第3、第4、第5只猴子都是这样做的……根据上面的条件,问这5只猴子至少摘了多少个桃子?第5只猴子走后还剩下多少个桃子?

 

枚举法:找准枚举对象 提高枚举效率,枚举s0,与枚举s5 的效率是差距很大的。s0执行了3116次,而s5只执行了255次

#include <stdio.h>
int main()
{
    int s0,s1,s2,s3,s4,s5,n,i;
    for(s5=1;; s5++)
    {
        s4=5*s5+1;
        if(s4%4)
            continue;
        else
            s4/=4;
        s3=5*s4+1;
        if(s3%4)
            continue;
        else
            s3/=4;
        s2=5*s3+1;
        if(s2%4)
            continue;
        else
            s2/=4;
        s1=5*s2+1;
        if(s1%4)
            continue;
        else
            s1/=4;
        s0=s1*5+1;
        break;

    }
    printf("%d %d\n",s0,s5*4);
    return 0;
}

 

转载于:https://www.cnblogs.com/tianmin123/p/4675966.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值