练习——关于猴子分桃的程序设计

前两天在看一个公众号时发现了一个比较有意思的问题,题目如下:

题目:
五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了个数相等的五堆,多出一只;于是,它吃掉了一个,拿走了一堆。第二只猴子起来一看,只有四堆桃,于是把四堆合在一起,分成相等的五堆,又多出一个;然后,它也吃掉了一个,拿走了一堆。剩下的三只猴子也都是这样分的。问:这堆桃至少有多少个?

然后我就拿着这个题目去找教数学的室友,室友听完了说:“有点麻烦,不算。”然后,俺就开始回屋去想解决办法。

诚然,正如我室友所言,这道题有点麻烦,逻辑很清晰,很好做,只是过程繁琐,机械地重复着(目前我还没想到太好的办法,只能暴力解题),而这,却正是程序设计的强项,一个程序可以极短时间完成大量的计算任务,而我们只需要负责思考怎么算,其他的交给计算机就好~

第一次看到这个题目的时候我想的是循环套循环来解决,for循环疯狂嵌套。。。。。。最后放弃了

C语言版本:
虽然最近一直在用Python,但由于之前用了几年的C,用C来解决问题变成了一种习惯,因此本次也是先写了一个C语言版本:(我觉得我算的是对的哈,如果不对还请指正)

#include<stdio.h>
int main(){
    int a , b, c, d, e;
    a = b = c = d = e = 0;
    while(1){
        a++;
        b = (a - 1) / 5 * 4;
        c = (b - 1) / 5 * 4;
        d = (c - 1) / 5 * 4;
        e = (d - 1) / 5 * 4;
        if((a - 1) % 5 == 0 && (b - 1) % 5 == 0 &&(c - 1) % 5 == 0 &&(d - 1) % 5 == 0 &&(e - 1) % 5 == 0 )
            break;
    }
    printf("至少有%d个桃子", a);
return 0;
}
运行结果如下:

 Python语言版本:
 这次写完C直接去写Python,更感受到Python与C在语法上的一些不同,比如一直习以为常的a++,在Python中就是不可以使用的,而a+=1是可以正常使用的。

Python代码如下:

a,b,c,d,e=(0,0,0,0,0)
while True:
    a = a+1;
    b = (a - 1)/5*4
    c = (b - 1)/5*4
    d = (c - 1)/5*4
    e = (d - 1)/5*4
    if (a-1)%5 == 0 and (b - 1)%5 == 0 and (c - 1)%5 == 0 and (d - 1)%5 == 0 and (e - 1)%5 == 0:
        break
print(a)
 运行结果如下:

3121
[Finished in 2.8s]
这么一看,Python确实比C慢了不老少啊!!!

恐怖如斯。

虽然题目很简单,但由于我是个菜鸡依然乐在其中,不足之处还请各位大佬批评指正,如果有其他简便算法或者能优化一下就更美妙了。

这种解法太暴力了,毫无美感(郑弟弟附体)

写在结尾
今天的我,依然帅气!
————————————————
版权声明:本文为优快云博主「青西284」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_60604095/article/details/120158904

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值