将数字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 per