python算法:平分7筐鱼

一,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/23/python-suan-fa-ping-fen-7-kuang-yu/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,平分7筐鱼的题目与解析

1,题目:

甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐。当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐是空的,由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个半筐鱼的重量是相等的。
在不将鱼倒出来的前提下,怎样将鱼和筐平分为三份?

2,解析:

思路:
每个人应分得7个箩筐,其中有3.5筐鱼。解决该问题可以采用一个3×3的数组,用来表示三个人分到的东西。

其中每个人对应数组的一行,数组的第0列放分到的鱼的整筐数,数组的第1列放分到的半筐数,数组的第2列放分到的空筐数。

需要满足的条件:对于每个人:
共分到7个筐,
筐中的鱼是3.5筐

对于组合后的分法:
每种分法的组合:
分到的整筐的鱼一共7个筐
分到的半筐的鱼一共7个筐

我们先得到每个人的分法,再组合起来

三,编写代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
x = []      # 保存符合条件的分法
for i in range(1, 4):     # 满筐的鱼不能超过3筐
    for j in range(1, 6):     # 半筐的鱼不能超过5,其他两人至少各需半筐
        k = 7 - i - j      # 一共分到7个筐,k表示空筐
        if k < 0:     # 空筐不能是负数
            break
        else:
            if (i * 10 + j * 5) == 35:      # 鱼加起来是否3筐半?
                x.append([i, j, k])
 
z = []     # 保存符合条件的分法的组合
for k1 in x:
    for k2 in x:
        for k3 in x:    # 组合的满筐一共7个, 且 组合的半筐一共7个
            if k1[0] + k2[0] + k3[0] == 7 and k1[1] + k2[1] + k3[1] == 7:
                kone = [k1, k2, k3]
                kone.sort()     # 因为分鱼时顺序不固定,排序是为了过滤重复方法
                if kone not in z:
                    z.append(kone)    # 保存到z列表中
 
print(z)    # 打印列表

运行结果:

[[[1, 5, 1], [3, 1, 3], [3, 1, 3]], [[2, 3, 2], [2, 3, 2], [3, 1, 3]]]
posted @ 2024-05-16 10:25  刘宏缔的架构森林  阅读(25)  评论(0编辑  收藏  举报