首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >算法创作|纸牌三角形

算法创作|纸牌三角形

作者头像
算法与编程之美
发布2021-04-22 14:59:53
发布2021-04-22 14:59:53
4120
举报

问题描述

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 itertoolsa = [1, 2, 3, 4, 5, 6, 7, 8, 9]res = 0for 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 += 1print('%d' % (res/6)) #iterator 循环器,itertools.permutations就是返回可迭代对象的所有数学全排列方式。

结语

解决一道蓝桥杯的真题,同时学到了一点新的知识,迭代器的一个方法的使用,虽然题目看似难度不大,还是要有缜密的思维思考方式,今后的会不断加强思维能力,做出更多的题目。

主编:欧洋

作者:涂瀚鑫、沈志坚、陈东

稿件来源:深度学习与文旅应用实验室(DLETA)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档