前两天在看一个公众号时发现了一个比较有意思的问题,题目如下:
题目:
五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了个数相等的五堆,多出一只;于是,它吃掉了一个,拿走了一堆。第二只猴子起来一看,只有四堆桃,于是把四堆合在一起,分成相等的五堆,又多出一个;然后,它也吃掉了一个,拿走了一堆。剩下的三只猴子也都是这样分的。问:这堆桃至少有多少个?
然后我就拿着这个题目去找教数学的室友,室友听完了说:“有点麻烦,不算。”然后,俺就开始回屋去想解决办法。
诚然,正如我室友所言,这道题有点麻烦,逻辑很清晰,很好做,只是过程繁琐,机械地重复着(目前我还没想到太好的办法,只能暴力解题),而这,却正是程序设计的强项,一个程序可以极短时间完成大量的计算任务,而我们只需要负责思考怎么算,其他的交给计算机就好~
第一次看到这个题目的时候我想的是循环套循环来解决,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