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/28/python-suan-fa-wu-jia-gong-jing/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,五家共井的题目与分析

1,题目

有五家共用一口井,
甲、乙、丙、丁、戊五家各有一条绳子汲水,
下面用文字表示每一家的绳子:
甲×2+乙=井深,
乙×3+丙=井深,
丙×4+丁=井深,
丁×5+戊=井深,
戊×6+甲=井深,
求甲、乙、丙、丁、戊各家绳子的长度和井深

2,分析

思路:
这种题目用的是五元一次方程组,

设甲、乙、丙、丁、戊五根绳子分别长a、b、c、d、e,井深h,
那么列出方程组:
2a + b = h
3b + c = h
4c + d = h
5d + e = h
6e + a = h

变形后:

b=h-2a
c=h-3b
d=h-4c
e=h-5d
a=h-6e

可知:
a=h-6(h-5d)
依次代入,最终得到:
721a = 265h
则:
h        721
–   =    –
a        265

设h = 721k



a = 265k
b = 191k
c = 148k
d = 129k
e = 76k

知道了比例之后,因为绳长和井深不可能为负,所以k > 0,
因为这里的数字只是成比例关系,所以这个题目就有多个解的,
在这里我们假定: 0 < k <6,把k的值代入即可

三,编写代码:

1
2
3
4
5
6
7
8
9
# 设i的取值范围:[1,5]
for i in range(1, 6):
    a = 265 * i    # 甲
    b = 191 * i    # 乙
    c = 148 * i    # 丙
    d = 129 * i    # 丁
    e = 76 * i     # 戊
    h = 721 * i    # 井深
    print(f"井深:{h},甲:{a},乙:{b},丙:{c},丁:{d},戊:{e}")

运行结果:

井深:721,甲:265,乙:191,丙:148,丁:129,戊:76
井深:1442,甲:530,乙:382,丙:296,丁:258,戊:152
井深:2163,甲:795,乙:573,丙:444,丁:387,戊:228
井深:2884,甲:1060,乙:764,丙:592,丁:516,戊:304
井深:3605,甲:1325,乙:955,丙:740,丁:645,戊:380

四,分析之二

如果解方程不需要花太多的步骤,在程序中用循环处理,是否也可以?
已知:
2a + b = h
3b + c = h
4c + d = h
5d + e = h
6e + a = h

可以得到:
a = b+c/2
b = c+d/3
c = d+e/4
d = e+a/5
不考虑小数的情况下,
可以得到:
c是2的倍数,
d是3的倍数,
e是4的倍数,
a是5的倍数

五,编写代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 函数,返回各家绳子的长度和井的深度
def fun():
    e = 0
    while True:
        e += 4  # e是4的倍数
        a = 0
        while True:
            a += 5  # a是5的倍数
            d = e + a / 5     # 得到d
            c = d + e / 4     # 得到c
            if c % 2 != 0 or d % 3 != 0# c是2的倍数,d是3的倍数
                continue
            b = c + d / 3      # 得到b
            if a > b + c / 2# a在自增,当a大于b + c / 2要停下来
                break
            if b + c / 2 == a:     # 得到a, 4个条件都匹配
                h = 2 * a + b      # 得到h,返回
                str = f"井深:{h},甲:{a},乙:{b},丙:{c},丁:{d},戊:{e}"
                return str
print(fun())

运行结果:

井深:721.0,甲:265,乙:191.0,丙:148.0,丁:129.0,戊:76
posted @ 2024-05-16 11:10  刘宏缔的架构森林  阅读(35)  评论(0编辑  收藏  举报