蓝桥杯A组——Python(09.30)Day4

蓝桥杯A组——Python(09.30)Day4

试题G: 杨辉三角形

   按从上到下、从左到右的顺序把杨辉三角的所有数排成一列,可以得到如下数列: 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,```
   给定一个正整数N,请你输出数列中第一次出现是在第几个数

简单遍历杨辉三角,直到找到n

def find_position(N):
    # 初始化变量
    current_row = [1]
    position = 1
    while True:
        for num in current_row:
            if num == N:
                return position
            position += 1
        next_row = [1]          # 生成下一行
        for i in range(1, len(current_row)):
            next_row.append(current_row[i - 1] + current_row[i])
        next_row.append(1)
        # 更新当前行为下一行
        current_row = next_row
N=int(input('please enter N:'))
print(f"数字 {N} 在数列中第一次出现的位置是: {find_position(N)}")

比较简单,熟悉一下杨辉三角

~~

试题H:左孩子右兄弟

   对于一棵多叉树,我们可以通过“左孩子右兄弟”表示法,将其转化成一棵二叉树。
   如果我们认为每个结点的子结点是无序的,那么得到的二又树可能不唯一换句话说,每个结点可以选任意子结点作为左孩子,并按任意顺序连接右兄弟。
给定一棵包含N个结点的多叉树,结点从1至N编号,其中1号结点是根,每个结点的父结点的编号比自己的编号小。
请你计算其通过“左孩子右兄弟”表示法转化成的二叉树,高度最高是多少(根节点高度为0)
   输入的第一行包含一个整数N。以下 N-1行,每行包含一个整数,依次示2至n号结点的父结点编号。

#实际理解题目后并不难,就是题目写的有点拗口,理解了好一会

print('输入格式为:输入的第一行包含一个整数N。以下 N-1行,每行包含一个整数,依次示2至n号结点的父结点编号。\n')
n = int(input())
a = [[]for i in range(n+2)]     #建立列表,表示i位置有几个子节点
for i in range(2,n+1):
    x = int(input())
    a[x].append(i)
def dfs(x):
    if len(a[x])==0:
        return 0
    maxn = 0
    for i in a[x]:
        maxn = max(maxn,dfs(i))
    return len(a[x])+maxn
print('\n')
print(dfs(1))

   方法是每次把当前根节点对应最长的子节点作为左节点,其它作为右兄弟节点
   不过有可能查找的数字过大,递归次数可能不太够,要自己设置一下递归深度

import sys
sys.setrecursionlimit(100000) 

今天的题目难度比较平均,理解题目后思路和具体代码就呼之欲出了

——————————————————————————————————

Day3终——进步ing
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值