棋盘放麦子
【问题】国际象棋的棋盘有共有64格。传说国王为奖励它的发明人,答应了他的一个“小”要求。
在棋盘的第1格放1粒小麦,第2格放2粒,第3格放4粒,第4格放8粒…,每一格是前一格数目的2倍。
这一共是多少小麦呢?是个天文数字!
请你利用计算机计算,准确地说,到底是多少小麦。
分析:
实际上就是求:
1 + 2 + 4 + 8 + …
一共凑齐64项就行。
注意,这个数字可能很大,
但,python可以自动处理大整数,因而程序十分简单,实际上只有一行。
def wheat(n):
return sum([2 ** i for i in range(n)])
if __name__ == '__main__':
print(wheat(64))
当然,在计算n次方的时候,不用每次都从头开始,只要在前一次结果基础上乘以2就可以了。
下面是用迭代器来完成这个想法。
def wheat(n):
def f(n):
a = 1
for i in range(n):
yield a
a *= 2
return sum(list(f(n)))
if __name__ == '__main__':
print(wheat(64))
需要补基础的,可以看:小甲鱼pyhthon教程,Bilibili站上还有:[耿老师]小甲鱼python作业 解析系列,持续更新中。
版权声明:本文为ggyhang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。