打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
算法创作|纸牌三角形
问题描述
A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
下图就是一种排法(如有对齐问题,参看p1.png)。
A
9 6
4   8
37 5 2
这样的排法可能会有很多。
如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?
笨笨有话说:
感觉可以暴力破解哦。
麻烦的是,对每个排法还要算出它的旋转、镜像排法,看看有没有和历史重复。
歪歪有话说:
人家又不让你把所有情况都打印出来,只是要算种类数。
对于每个基本局面,通过旋转、镜像能造出来的新局面数目不是固定的吗?
解决方案
通过对于本题,比较重要的一点是对所给数据做一个全排列,如何做到全排列,就要用到itertools,一个用于高效循环的迭代器,但是本题只是涉及一个简单的应用,所以就只是简单的学习该迭代器的一小部分知识,更多的做不到,该题所用到的的是permutations()的使用,该操作会得出所有可能的排序,没有重复的元素。之后是用if条件判断提前做出下标标记的所有数字是否满足等边三角形的相应知识,因为旋转得到情况3种,镜像有2种,所以得出结果后除以6就可以得到最终答案。
import itertools
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
res = 0
for i in itertools.permutations(a, 9):#遍历列表a,用itertools得出全排列结果
w = list(i)
if w[0]+w[1]+w[2]+w[3] == w[3]+w[4]+w[5]+w[6] == w[6]+w[7]+w[8]+w[0]:
res += 1
print('%d' % (res/6))
#iterator 循环器,itertools.permutations就是返回可迭代对象的所有数学全排列方式。
结语
解决一道蓝桥杯的真题,同时学到了一点新的知识,迭代器的一个方法的使用,虽然题目看似难度不大,还是要有缜密的思维思考方式,今后的会不断加强思维能力,做出更多的题目。
主编:欧洋
作者:涂瀚鑫、沈志坚、陈东
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python中的itertools.Permutations()
Python 排列组合的计算
【Python基础】Python中的高效迭代库itertools,排列组合随便求
迭代器神器 Python Itertools 大揭秘:如何让你的代码瞬间提升!
python itertools模块详解
python itertools功能详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服