python算法: 棋盘上的麦粒(舍罕王赏麦)

一,for循环:

1,功能:重复执行同一段代码
语法:

for index in range(n): 
    # 循环体代码

index : 用来依次接收可迭代对象中的元素的变量名
range()函数:负责返回整数序列

流程图:

2,应用

range可以同时指定start 和stop,用for遍历并打印

1
2
3
4
# 指定 start和stop
# print的参数 end=" " 用来使打印不换行
for num in range(3,9):
    print(num, end=" ")

运行结果:

3 4 5 6 7 8 

二,while循环:

1,功能:重复执行同一段代码
语法:

while 条件表达式:
    # 循环体

 当条件表达式的返回值为真时,则执行循环体中的语句,
执行完毕后,重新判断条件表达式的返回值,
如果表达式返回的结果为假,则退出循环体

2,流程图:

3,打印从1到10

1
2
3
4
5
# 打印从1到10
n = 1
while n <= 10:
    print(n, end=" ")
    n += 1

运行结果:

1 2 3 4 5 6 7 8 9 10 

说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/14/python-suan-fa-qi-pan-shang-de-mai-li-she-han-wang-shang-mai/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com

三,棋盘上的麦粒的题目与思路

1,题目:

印度的舍罕王打算重赏发明了国际象棋的宰相,宰相说:“陛下,请您在这张棋盘的第一个格內赏给我一粒麦子,在第二个格内赏给我两粒麦子在第三个格內赏给我四粒麦子,照这样每一格内都比前一格多一倍,把这棋盘的64个格都放满就行啦”。舍罕王满口答应:“你所要求的并不多,你会如愿以偿。

请问:一共需要赏赐给这位宰相多少粒麦子?

2,思路:

已知第一格放1粒,第二格放2粒,第三格放4粒,以此类推,而且知道棋盘的格子总数,所以用循环即可,而且for/while都可以

四,编写代码:

1, for循环

1
2
3
4
5
6
num = 1  # 当前格的麦子数量
total = 1  # 麦子总数
for i in range(2, 65):
    num *= 2  # 得到当前格上的麦子数量
    total += num  # 把当前格上的麦子数量添加到总数
print("麦子总数:", total)

运行结果:

麦子总数: 18446744073709551615

2,while循环

1
2
3
4
5
6
7
8
9
10
# 第一格的情况
total = 1    # 麦子总数,当前是第1格时,总数是1
num = 1      # 当前格上的麦子数量,第一格时麦子数量是1
grid = 1     # 第几格,当前是第一格
# 遍历到第64格
while grid <= 63:
    grid += 1      # 得到当前格
    num *= 2       # 得到当前格上的麦子数量
    total += num   # 把当前格上的麦子数量添加到总数
print("麦粒总数:", total)

运行结果:

麦粒总数: 18446744073709551615
posted @ 2024-05-15 10:25  刘宏缔的架构森林  阅读(593)  评论(0编辑  收藏  举报