我正在参加Python的在线入门计算机科学课程。一个家庭作业问题说国际象棋的发明者要求一粒米饭。第一天1粒,第二天2粒,第三天4粒,第五天8粒......一直到68天。我必须创建一个执行此操作的函数,返回输入的平方数的晶粒数。
我相信我所要做的就是从用户那里获得正方形的数量。将所有两个的倍数相加到用户输入的点,然后加1。我不知道该怎么做。这有什么恼人的;你可以知道该做什么,但不知道怎么做。
def function(li):
for i in range(len(li))
#I need a loop that adds all the multiples of 2 up to the point of the user's input than returns that value.
function()
答案 0 :(得分:2)
同样可以通过查看序列1,2,4,8...
作为2^0,2^1,2^2,2^3...
来完成,您可以创建一个简单的函数,根据天数为您提供金额。
def fun(days):
return 2**(days-1)
print fun(64)
9223372036854775808
答案 1 :(得分:0)
根据您的逻辑,谷物从1开始并且与前一天相比加倍
第一天:1(2 ** 0)
第二天:2(2 ** 1)
第三天:4(2 ** 2)
第四天:8(2 ** 3)
所以在第四天总共会有2**0 + 2**1 + 2**2 + 2**3
使用公式:
x**0 + x**1 + x**2 + x**3 .. x**m = (x**(m+1) - 1)/(x-1)
我们在2**(m+1) -1
x =2
所以在第四天(即自从我们从零指数开始以来m = 3),总谷物将是2**4 -1 =15
基于以上逻辑,您的功能应该是:
def totalGrains(days):
return 2**days - 1