Python 五人分鱼
A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。
日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。
B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份。 。
C、D、E依次醒来,也按同样的方法拿鱼。
问他们至少捕了多少条鱼?
实例
def main():
fish = 1
while True:
total, enough = fish, True
for _ in range(5):
if (total - 1) % 5 == 0:
total = (total - 1) // 5 * 4
else:
enough = False
break
if enough:
print(f'总共有{fish}条鱼')
break
fish += 1
if __name__ == '__main__':
main()
fish = 1
while True:
total, enough = fish, True
for _ in range(5):
if (total - 1) % 5 == 0:
total = (total - 1) // 5 * 4
else:
enough = False
break
if enough:
print(f'总共有{fish}条鱼')
break
fish += 1
if __name__ == '__main__':
main()
运行结果:
总共有3121条鱼
Python3 实例
高寒
167***2433@qq.com
这个代码的思路是:
让鱼的总数 fish 从 1 开始递增,当 fish 的数量可以满足无论分鱼分配规则,那么这个 fish 值就是合伙捕鱼的最小值。
for _ in range(5): if(total-1)%5==0: total=(total-1)//5*4高寒
167***2433@qq.com
python门外汗
yul***yahoo.com
参考:
n = 1 person1 = (n-1)/5 person2 = (person1 * 4 -1) / 5 person3 = (person2 * 4 -1) / 5 person4 = (person3 * 4 -1) / 5 person5 = (person4 * 4 -1) / 5 while True: if int(person1) == person1 and int(person2) == person2 and int(person3) == person3 and int(person4) == person4 and int(person5) == person5: break else: n += 1 person1 = (n-1)/5 person2 = (person1 * 4 -1) / 5 person3 = (person2 * 4 -1) / 5 person4 = (person3 * 4 -1) / 5 person5 = (person4 * 4 -1) / 5 print('There are %d fish in total.' %n)python门外汗
yul***yahoo.com
jinwei
350***291@qq.com
递归解法:
def need(n , r): if n % 5 == 1: if r == 5: return True else: return need(n - (n - 1) / 5 -1, r + 1) else: return False n = 6 while True: if need(n,1): break else: n = n + 5 print(n)jinwei
350***291@qq.com
ccneko
ccn***@163.com
根据规律可以推出一条公式:
# n个人总共捕鱼数量为:S = Kn^n-(n-1) K为正整数 # 最后一个人分得鱼的数量为:S(n) = K(n-1)^(n-1)-1 K为正整数 # 至少捕鱼数(即K为1) def min_fish(n): return n ** n - (n - 1) if __name__ == '__main__': n = int(input('请输入人数:')) print('至少捕了{0}条鱼'.format(min_fish(n)))ccneko
ccn***@163.com
养了一个月亮
145***6569@qq.com
递归形式,其中 x:总的分鱼人数,y=x+1(初始值):
def five_fish(n,m): if n==1: return m else: return five_fish(n-1,m)/0.8+1 x=int(input("一共有几人分鱼?")) y=x+1 while five_fish(x,y)!=int(five_fish(x,y)): y+=x print("那么至少有{}条鱼。".format(five_fish(x,y)))养了一个月亮
145***6569@qq.com