本文主要是介绍Python算法100例-2.2 出售金鱼,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
完整源代码项目地址,关注博主私信'源代码'后可获取
- 1.问题描述
- 2.问题分析
- 3.算法设计
- 4.完整的程序
1.问题描述
小明将养的一缸金鱼分5次出售:第1次卖出全部的一半加1/2条;第2次卖出余下的三分之一加1/3条;第3次卖出余下的四分之一加1/4条;第4次卖出余下的五分之一加1/5条;最后卖出余下的11条。试编程求出原来鱼缸中共有多少条金鱼。
2.问题分析
依题意可知,金鱼是分5次出售的,每次卖出的方式都相同,因此可以用表达式将每次卖鱼后剩下的条数计算出来。
由:
第1次卖出全部的一半加1/2条;
第2次卖出余下的三分之一加1/3条;
第3次卖出余下的四分之一加1/4条;
第4次卖出余下的五分之一加1/5条。
可推出:
第j次卖出余下的(j+1)分之一加1/(j+1)条。
假设第j次卖鱼前金鱼总数为x,则第j次卖鱼后鱼缸中还剩下金鱼的条数为x-(x+1)/(j+1)。
又由于“最后卖出余下的11条”,因此第4次卖鱼后鱼缸中剩下的金鱼条数为11。
因为金鱼只能整条进行出售,因此x+1必然能够整除j+1。
可以从23开始试探x的取值,由于x值必为奇数,因此步长取2。
3.确定程序框架
程序流程图如图所示。
4.完整的程序
根据上面的分析,编写程序如下:
%%time
# 出售金鱼if __name__=="__main__":flag = 0 # flag作为控制标志i = 23while flag == 0:j = 1 # j表示卖鱼的次数x = i # x表示每次卖鱼的条数while j <= 4 and x >= 11:if (x + 1) % (j + 1) == 0: # 判断x + 1是否能整除j + 1x -= (x+1)//(j+1)else:x = 0breakj += 1if j == 5 and x == 11:print("原来鱼缸中共有%d条金鱼." %i)flag = 1 # 求出结果,flag置为1,退出试探i += 2
这篇关于Python算法100例-2.2 出售金鱼的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!