舍罕王的失算、、没看懂啥意思!!
相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜爱国际象棋,便决定让宰相自己选择何种赏赐。这位聪明的宰相指着 8×8 共 64 格的象棋棋盘说:陛下,请您赏给我一些麦子吧。就在棋盘的第 1 格中放 1 粒,第 2 格放 2 粒,第 3 格放 4 粒,以后每一格都比前一格增加一倍,依此放完棋盘上 64 格,我就感激不尽了……
舍罕王听了达依尔这个“小小”的要求,便让人扛来一袋麦子,他要兑现许诺。结果,在给达依尔发放麦子时,舍罕王发现他要给达依尔的麦子比自己想象的要多得多,一袋麦子是远远不够的……
编程计算舍罕王应该给达依尔多少粒麦子?
问题:
1、为什么循环是i <= 64。
2、为什么pow()是2,i-1,第一次循环i的值是1那pow函数2的i-1次方那不是2的0次方了?
i = 1
sum = 0
while i <= 64:
wheats = pow(2, i-1)
sum = sum + wheats
i = i + 1
print("舍罕王应该给达依尔", sum, "粒麦子!")
1.总共64格,否则你认为该循环到多少呢
2.第一次是1,2的0次方有啥问题。。非0数的0次方为1这简单数学常识啊 风车呼呼呼 发表于 2022-6-27 12:27
1.总共64格,否则你认为该循环到多少呢
2.第一次是1,2的0次方有啥问题。。非0数的0次方为1这简单数学常识 ...
这么说那现在 i 是0,循环到下面 i = i + 1 ,那么循环从新开始,那么pow(2, i - 1)那 i 不是又等于 0 ? 那这样 i 的值不应该只能是0或1,不成了死循环!!! heiwuchang207 发表于 2022-6-27 13:08
这么说那现在 i 是0,循环到下面 i = i + 1 ,那么循环从新开始,那么pow(2, i - 1)那 i 不是又等于 0...
你这样是对的,因该把-1去掉 hveagle 发表于 2022-6-27 13:45
你这样是对的,因该把-1去掉
哦不对,你理解错了。这个-1不是把i给减了1,只有i = i - 1或者i -= 1才会i减少1 所以i还是1,下次循环后,i为2。至于2的0次方吗。。。。。。就把i = 1改成i = 2 heiwuchang207 发表于 2022-6-27 13:08
这么说那现在 i 是0,循环到下面 i = i + 1 ,那么循环从新开始,那么pow(2, i - 1)那 i 不是又等于 0...
传的是 i-1 的值,和 i 有什么关系?i=1 时和 i=2 时。带入这个式子,它们的值会相等会循环吗? 风车呼呼呼 发表于 2022-6-27 12:27
1.总共64格,否则你认为该循环到多少呢
2.第一次是1,2的0次方有啥问题。。非0数的0次方为1这简单数学常识 ...
是不是这么个意思!!!
代码:
i = 1
sum = 0
while i <= 64:
wheats = pow(2, i-1)
sum = sum + wheats
i = i + 1
运行流程:
第一次运行i=1,进入循环,(pow函数2的i-1次方,用的是i减1的值,也就是2的0次方)并不改变i本身的值。sum等于1
第二次运行i=2,进入循环,(pow函数2的i-1次方,用的是i减1的值,也就是2的1次方)2的1次方也就是2。sum=1+2
第三次运行i=3,进入循环,(pow函数2的i-1次方,用的是i减1的值,也就是2的2次方)2的2次方也就是4。
sum=1+2+4 hveagle 发表于 2022-6-27 13:50
所以i还是1,下次循环后,i为2。至于2的0次方吗。。。。。。就把i = 1改成i = 2
i = 1改成i = 2是不对的
这样的话不符合题意第一格放一粒麦子,因为2的1次方是2 heiwuchang207 发表于 2022-6-27 14:27
是不是这么个意思!!!
代码:
i = 1
是。不要光盯着代码,对照问题描述,符合了就对了 {:10_256:} {:10_261:} {:10_261:} {:10_279:} {:10_249:} {:10_249:}
页:
[1]