日更成长营自学编程Python

自学Python:三个渔夫平分7筐鱼

2022-01-26  本文已影响0人  小强聊成长

A、B、C三位渔夫出海打鱼,他们随船带了21只箩筐。当晚返航时,他们发现有7筐装满了鱼,还有7筐装了半筐鱼,另外7筐是空的。

由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个半筐鱼的重量是相等的。

那么问题来了,如何在不将鱼倒出来的前提下,怎样将鱼和筐平分为三份?

下面直接上代码:

########################

if __name__ == '__main__':

    print("分鱼的方案如下: ")

    count = 0

    a = [[0]*3 for i in range(3)]

    for i in range(4):  # 试第一个人满筐a[0][0]的值,满筐数不能>3

        a[0][0] = i

        j = i

        while j <= 7 - i and j <= 3:  # 试第二个人满筐a[1][0]的值,满筐数不能>3

            a[1][0] = j

            a[2][0] = 7 - j - a[0][0]

            j += 1

            if a[2][0] > 3:

                continue # 第三个人满筐数不能>3

            if a[2][0] < a[1][0]:

                break      # 要求后一个人分的满筐数大于等于前一个人,以排除重复情况

            for k in range(1, 6, 2):# 试半筐a[0][1]的值,半筐数为奇数

                a[0][1] = k

                for m in range(1, 7 - k, 2):  # 试半筐a[1][1]的值,半筐数为奇数

                    a[1][1] = m

                    a[2][1] = 7 - k - m

                    flag, n = True, 0  # 判断每个人分到的鱼是否为3.5筐,flag为满足题意的标记变量

                    while flag and n < 3:

                        if a[n][0] + a[n][1] < 7 and a[n][0] * 2 + a[n][1] == 7:

                            a[n][2] = 7 - a[n][0] - a[n][1] # 计算应得到的空筐数量

                        else:

                            flag = False  # 不符合题意则置标记为0

                        n += 1

                    if flag:

                        count += 1

                        print('方案:', count, ' 满框数 半框数 空框数')

                        for n in range(3):

                            print('渔夫', chr(65 + n), ':', a[n][0], a[n][1],a[n][2])

########################

执行结果如下:

分鱼的方案如下:

方案: 1  满框数 半框数 空框数

渔夫 A : 1 5 1

渔夫 B : 3 1 3

渔夫 C : 3 1 3

方案: 2  满框数 半框数 空框数

渔夫 A : 2 3 2

渔夫 B : 2 3 2

渔夫 C : 3 1 3

________________END______________

上一篇 下一篇

猜你喜欢

热点阅读