【蓝桥杯训练】第四天1294、1297

1294

[蓝桥杯2016初赛]平方怪圈

如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
输出
输出答案即可

注意

签到题

算法

笔算可得结果145

题解

结果:145

1297

[蓝桥杯2016初赛]搭积木

小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木
下面是两种合格的搭法:

请你计算这样的搭法一共有多少种?
输出
一个整数表示答案

注意

排列题

算法

  1. 必定0在第一层,1在第二层
  2. 为减少枚举次数,分1在左,或1在右
  3. 把其拉直按从左到右,从上到下

题解

from itertools import permutations
def f(data):
    SF = 1
    for i in range(6):
        if i == 0:continue
        elif i == 2 or i ==1:
            if data[i]<data[i+2] and data[i]<data[i+3]:
                continue
            else:
                SF = 0
                break
        else: 
            if data[i]<data[i+3] and data[i]<data[i+4]:
                continue
            else:
                SF = 0
                break
    if SF:     
        return True
res = 0
# 1在第二层左边
a = [i for i in range(10)]
b = [i for i in range(10)]
print(b)
for i in permutations([2,3,4,5,6,7,8,9]):
    b[2:] = i
    if f(b):
        res += 1
# 1在第二层右边
a[1],a[2] = a[2],a[1]
print(a)
for i in permutations([2,3,4,5,6,7,8,9]):
    a[1] = i[0]
    a[3:] = i[1:]
    if f(a):
        res += 1
        if res == 501 or res == 101:
            print('/',a)
print(res)

猜你喜欢

转载自www.cnblogs.com/yanshanbei/p/12229214.html