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 

说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/20/python-suan-fa-ma-ke-si-de-shu-xue-ti/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,题目与分析:

1,题目:

马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩,他们在同一家饭馆吃饭,总共花了50先令。
已知每个男人吃饭需要花3先令,每个女人吃饭需要花2先令,每个小孩吃饭需要花1先令,请编程求出男人、女人和小孩各有几人?

2,分析:

思路:
设变量x、y和z分别代表男人、女人和小孩,则由题目的要求,可得到右侧的方程组。
方程①表示男人、女人和小孩加起来总共有30个人;方程②表示30个人吃饭总共花了50先令。

根据上述方程式可以得到:
2x+y=20,
则: y = 20 – 2x
可以得到x取值范围是[0,10]
可以得到y取值范围是[0,20]
然后可以遍历x的值,从而得到y,z的值,再根据方程式判断是否匹配

三,编写代码:

1, for循环一: 两遍循环

1
2
3
4
5
6
7
# 变量x、y和z分别代表男人、女人和小孩
for x in range(0, 10 + 1):      # x 取值范围:0到10
    for y in range(0, 20+1):      # y 取值范围: 0 到 20
        z = 30 - x - y    # 根据方程①,当x、y一定时,可确定z值
        # 检验,是否匹配方程②,如匹配则得到一组解
        if 3 * x + 2 * y + z == 50:
            print(f"男:{x} 女:{y} 孩:{z}")

运行结果:

男:0 女:20 孩:10
男:1 女:18 孩:11
男:2 女:16 孩:12
男:3 女:14 孩:13
男:4 女:12 孩:14
男:5 女:10 孩:15
男:6 女:8 孩:16
男:7 女:6 孩:17
男:8 女:4 孩:18
男:9 女:2 孩:19
男:10 女:0 孩:20

2,for循环二:优化后一遍循环

1
2
3
4
5
6
7
# 变量x、y和z分别代表男人、女人和小孩
for x in range(0, 10 + 1):      # x 取值范围:0到10
    y = 20 - 2 * x    # 当x一定时,可确定y值
    z = 30 - x - y    # 根据方程①,当x、y一定时,可确定z值
    # 检验,是否匹配方程②,如匹配则得到一组解
    if 3 * x + 2 * y + z == 50:
        print(f"男:{x} 女:{y} 孩:{z}")

运行结果:

男:0 女:20 孩:10
男:1 女:18 孩:11
男:2 女:16 孩:12
男:3 女:14 孩:13
男:4 女:12 孩:14
男:5 女:10 孩:15
男:6 女:8 孩:16
男:7 女:6 孩:17
男:8 女:4 孩:18
男:9 女:2 孩:19
男:10 女:0 孩:20
posted @ 2024-05-15 10:40  刘宏缔的架构森林  阅读(26)  评论(0编辑  收藏  举报