A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
下面就是一种排法
A
9 6
4 8
3 7 5 2
这样的排法可能会有很多。
如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?
提示:考虑到旋转,每个数字可以随机出现在三角形的一角,结果除以3,考虑到镜像,结果要除以2。
import itertools
res = 0
b = [i for i in range(1, 10)]
for a in list(itertools.permutations(b, 9)):
e_1 = a[0] + a[1] + a[2] + a[3]
e_2 = a[3] + a[4] + a[5] + a[6]
e_3 = a[6] + a[7] + a[8] + a[0]
if e_1 == e_2 and e_2 == e_3:
res += 1
print(int(res / 3 / 2))
输出结果:144
总结:先用itertools库中的permutations来进行全排列,其返回的是元组类型的迭代器,这是一个小重点,解决全排列基本上就差不多了,全排列的知识有兴趣的可以深入探究,这里就不过多赘述了。