题目:
第三题:搭积木
题目描述
小明最近喜欢搭数字积木,
一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。
下面是两种合格的搭法:
0
1 2
3 4 5
6 7 8 9
0
3 1
7 5 2
9 8 6 4
请你计算这样的搭法一共有多少种?
请填表示总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
一个月的复习时间从小白到争取省二,我只能使用暴力法
a=0
count=0
for b in range(1,10):
for c in range(1,10):
if b==c:
continue
for d in range(1,10):
if d==b or d==c:
continue
for e in range(1,10):
if e==b or e==c or e==d:
continue
for f in range(1,10):
if f==b or f==c or f==d or f==e:
continue
for g in range(1,10):
if g==b or g==c or g==d or g==e or g==f:
continue
for h in range(1,10):
if h==b or h==c or h==d or h==e or h==f or h==g:
continue
for i in range(1,10):
if i==b or i==c or i==d or i==e or i==f or i==g or i==h:
continue
for j in range(1,10):
if j==b or j==c or j==d or j==e or j==f or j==g or j==h or j==i:
continue
if (d>b and e>b) and (e>c and f>c) and (g>d and h>d) and (h>e and i>e) and (i>f and j>f):
count+=1
暴力法也是有技巧的,需要将枚举的数量尽可能的减少,由题目可知,
0永远在第一层,所以需要枚举的是 1->9的9次方,即99
这样O(n)=99,能进行暴力法,因为是填空题没时间限制,但是,需要排除那些相等的情况,所以如:if c=b: continue
这样排除相等情况,
再跟据题目要求,写出
这是我的抽象模型
a
b c
d e f
g h i j
读题目要求可知:因为0在第一层,所以 b,c必大于a
所以判断条件成立,计数加一 (d>b and e>b) and (e>c and f>c) and (g>d and h>d) and (h>e and i>e) and (i>f and j>f)