一,题目描述
如下图所示。在七角星的 14 个节点上填入 1 ~ 14 的数字,不重复,不遗漏。要求每条直线上的四个数字之和必须相等。
二,答案提交
图中已经给出了 3 个数字。 请计算其它位置要填充的数字,答案唯一。填好后,请输出绿色节点的 4 个数字(从左到右,用空格分开)。
三,答案代码
from itertools import permutations
for i in permutations([1,2,3,4,5,7,8,9,10,12,13],11):
num=i[0]+i[1]+i[2]+i[3]
if num==6+i[1]+i[4]+14:
if num==6+i[2]+i[5]+11:
if num==14+i[6]+i[7]+i[9]:
if num==i[3]+i[5]+i[8]+i[9]:
if num==i[10]+i[7]+i[8]+11:
if num==i[0]+i[4]+i[6]+i[10]:
print(i[0],i[1],i[2],i[3])
答案:10 3 9 8
四,题目解析
题目是让填数字,范围是1~14,且保证每一条线上的数字和相等,可以把这些空1~14当成一个数列,利用排列组合的形式将数填入其中,并加上条件在输出结果。
五,代码解析
from itertools import permutations #引入组合函数
for i in permutations([1,2,3,4,5,7,8,9,10,12,13],11): #i是这个排列组合的一种情况,用for循环依次输出。
sum=i[0]+i[1]+i[2]+i[3] #sum是每一条直线上数字的和
if sum==6+i[1]+i[4]+14:
if sum==6+i[2]+i[5]+11:
if sum==14+i[6]+i[7]+i[9]: #判断每一条直线数字和是否相等,相等的话继续判断,直到所有直线数字和相等
if sum==i[3]+i[5]+i[8]+i[9]:
if sum==i[10]+i[7]+i[8]+11:
if sum==i[0]+i[4]+i[6]+i[10]:
print(i[0],i[1],i[2],i[3])
中心思想就是让排列组合的数去填如空格里,并且排除不符合条件的值,看下图就可以很好理解啦!
结语:给个赞,顶我 !顶我! 今天开始,更新每十年脑血栓说不出来的话,来期待吧!!!!
十年脑血栓语录:
我妈怀我那10个月算非法拘禁吗??