python3 题解(34 棋盘放麦子)

棋盘放麦子

【问题】国际象棋的棋盘有共有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版权协议,转载请附上原文出处链接和本声明。