我是靠谱客的博主 昏睡帽子,最近开发中收集的这篇文章主要介绍python之捕鱼问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2018.03.04
auther:wills

捕鱼,有abcde五个人去捕鱼,补了很多鱼fish,休息一夜,a最先醒来,扔了一条鱼然后平均分成五份,拿走了自己的一份。b第二个醒来,也扔了一条鱼然后平均分成五份,拿走了自己的一份。c第三个醒来,d第四个醒来,e第五个醒来均进行了相同的动作,问:最少有多少条鱼?

先从正向捕鱼说起

下面是我最初写的代码

fish = 1
while True
flag = 1
for _ in range(5):
if (fish - 1)%5==0:
fish = (fish - 1)//5*4
else:
flag = 0
break
if flag:
print(fish)
break
fish += 1

这段代码我已运行就进入死循环,找了半天都没找到问题点,最后才发现我从fish=1开始,进入if语句后fish被修改为0,然后又fish+=1,进入了死循环。修改后代码如下

fish = 1
while 1:
flag = 1
total = fish
for _ in range(5):
if (total - 1)%5==0:
total = (total -1)//5*4
else:
flag = 0
if flag:
print(fish)
break
fish += 1

逆向思维,假设第五个人分鱼后剩下的鱼为fish,这样分鱼过程就只有4次,可以少一个循环代码如下

for fish in range(1,10000):
for n in range(4):
if (fish -1 )%5 == 0 and fish%4 == 0:
fish = fish//4*5+1
if n ==3:
print(fish)
# else:
#
break

这个分鱼方法有个好处,就是代码极少,只有6行,#号注释的两行只是用于跳出for循环提高代码执行速度

下面这个while+for循环的办法可以更高的提高代码执行速度,不过稍微需要多加几个变量

fish = 1
flag = 1
while flag:
total = fish
for n in range(4):
if (total-1)%5==0 and total%4==0:
total = total//4*5+1
if n==3:
print(fish)
print(total)
flag =0
fish += 1

下面我把4种捕鱼代码都放到一起,并且使用了一个time函数来进行计时,比较几种代码的运行效率

from time import time
a1 = time()
fish = 1
while 1:
flag = 1
total = fish
for _ in range(5):
if (total - 1)%5==0:
total = (total -1)//5*4
else:
flag = 0
if flag:
print(fish)
break
fish += 1
a2 = time()
for fish in range(1,10000):
for n in range(4):
if (fish -1 )%5 == 0 and fish%4 == 0:
fish = fish//4*5+1
if n ==3:
print(fish)
a3 = time()
for fish in range(1,10000):
for n in range(4):
if (fish -1 )%5 == 0 and fish%4 == 0:
fish = fish//4*5+1
if n ==3:
print(fish)
else:
break
a4 = time()
fish = 1
flag = 1
while flag:
total = fish
for n in range(4):
if (total-1)%5==0 and total%4==0:
total = total//4*5+1
if n==3:
print(fish)
print(total)
flag =0
fish += 1
a5 = time()
print(a2-a1)
print(a3-a2)
print(a4-a3)
print(a5-a4)

下面是3次运行结果

第一次

第二次

第三次

这里写图片描述

可以看出第二种代码最简洁,但是运行速度最慢,第四种虽然有点冗长,但是运行速度是最快的。那么众位看官,你们会选哪一种呢。

最后

以上就是昏睡帽子为你收集整理的python之捕鱼问题的全部内容,希望文章能够帮你解决python之捕鱼问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部