编程题
A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。求至少捕了多少条鱼?
思路分析
从题中可以看出,假设总共有x条鱼,且x-1是一个可以被5整除的数,分鱼规则:
A看到的鱼为x条,将鱼分成5份,拿走自己的一份是(x-1)/5条鱼,剩余的x-1-(x-1)/5条鱼;
B看到的鱼为x条(其实是A分完后剩余的鱼),将鱼分成5份,拿走自己的一份是(x-1)/5条鱼,剩余的x-1-(x-1)/5条鱼;依次到E。
解题方法:
采用双层循环完成程序设计,外层循环累加鱼可能的总数,内层循环判断是否符合以上分鱼的规则外层循环:从6开始循环,每次叠加5的倍数内层循环:设可以分好,设置flag逻辑标签为真。开始循环5次,即五个人进行分鱼。如果剩余的鱼,x-1不能被5整除,则无法再往下分,flag为假,使用break语句终止循环。如果分完鱼,flag依然为真,则此时假设的鱼总数即为最少的捕鱼数。编程实现
#!/usr/bin/envpython#-*-coding:utf-8-*-#
Author:青松#Time:/3/:51#Site#首先x的取值范围为5*a+1a=1#a为增量,从1开始增加whileTrue:s=5*a+1#假设总数为xx=sprint(假设鱼的总数为,x)print(----------------开始分鱼了----------------)flag=True#假设可以分成功forninrange(1,6):#5个人分鱼#检查一下是否可分if((x-1)%5==0):#拿了自己那一份,t条鱼t=(x-1)/5#剩余r=(x-1)*4/5print(第%d人看到鱼的总数为%d条,丢了1条,拿了%d条,剩余%d条%(n,x,t,r))#下一个人看到的总数为x=relse:flag=Falsebreakifflag==True:print(--------------终于分成功了,结束--------------)print(他们合伙至少捕鱼%d条%s)breakelse:print(--------------分失败了,继续--------------)a+=1运行结果