算法创作|纸牌三角形

简介: 算法创作|纸牌三角形

问题描述

A,2,3,4,5,6,7,8,9 9张纸牌排成一个正三角形(A1计算)。要求每个边的和相等。

下图就是一种排法(如有对齐问题,参看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就是返回可迭代对象的所有数学全排列方式。


结语

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


目录
相关文章
|
9月前
|
算法
【算法专题突破】双指针 - 有效三角形的个数(5)
【算法专题突破】双指针 - 有效三角形的个数(5)
16 0
|
9月前
|
存储 算法 程序员
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(下)
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(下)
36 0
|
9月前
|
算法 Java C语言
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(上)
【五一创作】C++程序设计与算法(一) 北京大学 郭炜
60 0
|
2月前
|
算法
【优选算法】——Leetcode——611. 有效三角形的个数
【优选算法】——Leetcode——611. 有效三角形的个数
|
2月前
|
算法 前端开发
前端算法-最大三角形面积-鞋带公式&-海伦公式
前端算法-最大三角形面积-鞋带公式&-海伦公式
40 0
|
2月前
|
算法
优选算法|【双指针】|611.有效三角形的个数
优选算法|【双指针】|611.有效三角形的个数
|
2月前
|
算法 测试技术
day2·算法-快乐数-有效三角形个数
day2·算法-快乐数-有效三角形个数
10 0
|
2月前
|
存储 算法 JavaScript
JS算法-三角形最小路径和
JS算法-三角形最小路径和
|
9月前
|
算法 Java
【洛谷算法题】P5708-三角形面积【入门1顺序结构】
【洛谷算法题】P5708-三角形面积【入门1顺序结构】
|
9月前
|
算法 Java 索引
【洛谷算法题】B2005-字符三角形【入门1顺序结构】
【洛谷算法题】B2005-字符三角形【入门1顺序结构】