将数字1到9填入下面圆圈里,每个数字只使用一次,使得三角形三条边之和相等

将数字1到9填入下面圆圈里,每个数字只使用一次,使得三角形三条边之和相等。求出所有解。

   O
  O O
 O   O
O O O O

这题目怎么解?后来才知道老师靠试的,给出了一个答案。既然靠试,这种苦差事还不如写段小程序来穷举,还能提高孩子学编程的兴趣。

思路是这样的。将所圆圈定义如下:

      a0
    a1  a8
  a2      a7
a3  a4  a5  a6

为了避免重复,令:
a0<a3<a6
a1<a2
a4<a5
a7<a8

开始编程,语言Python

#检查是否重复
def unique(a):
    return a[0] < a[3] and a[3] < a[6]\
        and a[1] < a[2] and a[4] < a[5]\
        and a[7] < a[8]

#验证三边和是否相等
def verify(a):
    s = sum(a[6:]) + a[0]
    return sum(a[0:4]) == s and sum(a[3:7]) == s

#输出解
def solution(a):
    print('   %d' % a[0])
    print('  %d %d' % (a[1], a[8]))
    print(' %d   %d' % (a[2], a[7]))
    print('%d %d %d %d' % (a[3], a[4], a[5], a[6]))
    print('') # 空一行

#用全排列搜索所有解
from itertools import permutations

n = 0 #解的数量
for a in permutations(range(1, 10)):
    if verify(a) and unique(a):
        n += 1
        print('%d# sum=%d' % (n, sum(a[0:4])))
        solution(a)

答案还不少,18个。

1# sum=17
   1
  5 7
 9   6
2 4 8 3

2# sum=19
   1
  5 8
 9   3
4 2 6 7

3# sum=17
   1
  6 9
 8   4
2 5 7 3

4# sum=19
   1
  6 9
 8   2
4 3 5 7

5# sum=20
   1
  6 7
 8   3
5 2 4 9

6# sum=20
   2
  4 7
 9   3
5 1 6 8

7# sum=19
   2
  5 6
 9   4
3 1 8 7

8# sum=20
   2
  6 9
 7   1
5 3 4 8

9# sum=19
   2
  6 9
 8   1
3 4 5 7

10# sum=21
   3
  2 6
 9   4
7 1 5 8

11# sum=20
   3
  4 9
 8   1
5 2 6 7

12# sum=21
   3
  4 7
 8   2
6 1 5 9

13# sum=21
   3
  5 9
 6   1
7 2 4 8

14# sum=21
   3
  5 8
 7   1
6 2 4 9

15# sum=20
   4
  2 7
 9   3
5 1 8 6

16# sum=20
   4
  3 9
 8   1
5 2 7 6

17# sum=23
   7
  2 4
 6   3
8 1 5 9

18# sum=23
   7
  3 6
 5   1
8 2 4 9
    原文作者:taiq
    原文地址: https://blog.csdn.net/taiq/article/details/109923350
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞