Bootstrap

11.25.2024刷华为OD

HJ76 尼科彻斯定理(观察题,不难)

链接
代码

n = int(input())

# from numpy import right_shift
total = n ** 3
ave = 0
ave = int(total / n)
left_L = []
right_L = []
mid = []
if ave % 2 == 0:
    left_end = ave - 1
    right_start = ave + 1
    left_L.append(left_end)
    right_L.append(right_start)
    for i in range(int(n/2)-1):
        left_L.append(left_end - (i+1)*2)
        right_L.append(right_start + (i+1)*2)
else:
    # left_end = ave - 2
    # right_start = ave + 2
    for i in range(int((n-1)/2)):
        left_L.append(ave - (i+1)*2)
        right_L.append(ave + (i+1)*2)
    mid.append(ave)
left_L = left_L[::-1]
# print(left_L+mid+right_L)
res = left_L+mid+right_L
res = [str(ch) for ch in res]
print('+'.join(res))

HJ77 火车进站(DFS)

在这里插入图片描述

# 定义一个全局变量 res 用于存放最终的出站序列
res = []

# 定义递归函数 dfs
def dfs(wait, stack, out):
    """
    递归深度优先搜索所有可能的出站序列
    
    参数:
    wait (list): 还未进站的火车编号列表
    stack (list): 当前已经进站但未出站的火车编号
    out (list): 已经出站的火车编号序列
    """
    # 如果 wait 和 stack 都为空,说明所有火车已经完成进站出站,将当前的出站序列添加到 res 中
    if not wait and not stack:
        res.append(' '.join(map(str, out)))
    
    # 如果 wait 不为空,将当前 wait 列表的第一个火车编号入栈,递归调用 dfs 函数
    if wait:
        dfs(wait[1:], stack + [wait[0]], out)
    
    # 如果 stack 不为空,将栈顶的火车编号出栈,添加到 out 序列中,递归调用 dfs 函数
    if stack:
        dfs(wait, stack[:-1], out + [stack[-1]])

# 主程序
while True:
    try:
        # 读取输入数据
        n, nums = int(input()), list(map(int, input().split()))
        
        # 调用 dfs 函数计算所有的出站序列
        dfs(nums, [], [])
        
        # 按照字典序输出所有的出站序列
        for i in sorted(res):
            print(i)
        
        # 清空 res 列表,准备处理下一组数据
        res.clear()
    except:
        # 遇到异常则退出循环
        break

HJ91 走格子方法,(动态规划,递归,有代表性)

在这里插入图片描述

def func(x,y):
    if x < 0 or y < 0:
        return 0
    elif x == 0 or y == 0:
        return 1
    else:
        return func(x-1, y)+func(x, y-1)

 
while True:
    try:
        n, m = map(int, input().split())
        res = func(n, m)
        print(res)
    except:
        break

```py
#动态规划解决
#nowcoder不能导入numpy模块,只能手工创建二维数组
#重点注意二维数据的创建方法,重点注意其横竖坐标,注意注意
#dp = [[1 for i in range(n+1)] for j in range(m+1)],横坐标是 n, 竖坐标是m

while True:
    try:
        n,m = map(int, input().split(' '))
        dp = [[1 for i in range(n+1)] for j in range(m+1)]
        for i in range(1,m+1):
            for j in range(1,n+1):
                dp[i][j] = dp[i-1][j]+dp[i][j-1]
        print(dp[m][n])
    except:
        break


HJ93 数组分组(递归)

在这里插入图片描述

def fun(sum3, sum5, other):

    if sum3 == sum5 and len(other) == 0:
        return True
    elif len(other) == 0:
        return False
    else:
        return fun(sum3 + other[0], sum5, other[1:]) or fun(
            sum3, sum5 + other[0], other[1:]
        )


while True:

    try:
        n = int(input())
        num_list = list(map(int, input().split()))

        list3, list5, other = [], [], []
        for i in num_list:
            if i % 3 == 0:
                list3.append(i)
                continue
            if i % 5 == 0:
                list5.append(i)
                continue
            other.append(i)
        sum3 = sum(list3)
        sum5 = sum(list5)
        if fun(sum3, sum5, other):
            print("true")
        else:
            print("false")

    except:
        break

语法知识记录

;