11.25.2024刷华为OD

文章目录

  • [HJ76 尼科彻斯定理(观察题,不难)](#HJ76 尼科彻斯定理(观察题,不难))
  • [HJ77 火车进站(DFS)](#HJ77 火车进站(DFS))
  • [HJ91 走格子方法,(动态规划,递归,有代表性)](#HJ91 走格子方法,(动态规划,递归,有代表性))
  • [HJ93 数组分组(递归)](#HJ93 数组分组(递归))
  • 语法知识记录

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

python 复制代码
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)

python 复制代码
# 定义一个全局变量 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 走格子方法,(动态规划,递归,有代表性)

python 复制代码
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
python 复制代码
```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 数组分组(递归)

python 复制代码
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

语法知识记录

相关推荐
fangzhanpeng1687 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心9 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552715 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552715 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝17 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552717 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552718 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552720 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552720 天前
Java I/O核心操作实战
人工智能·1024程序员节
u01030552721 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节