【思特奇杯•云上蓝桥---算法训练营】蓝桥杯真题-七星填空(Python)

一,题目描述

如下图所示。在七角星的 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个月算非法拘禁吗??

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TUSTer_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值