华为od机试C卷&D卷题解Python版(更新ing,五角星代表难度等级)

OD410.最富裕的小家庭★★★★★★

题目描述:
在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为一个小家庭。
现给你一颗树,请计算出最富裕的小家庭的财富和。

输入描述:
第一行为一个数 N,表示成员总数,成员编号 1~N。1 ≤ N ≤ 1000
第二行为 N 个空格分隔的数,表示编号 1~N 的成员的财富值。0 ≤ 财富值 ≤ 1000000
接下来 N -1 行,每行两个空格分隔的整数(N1, N2),表示 N1 是 N2 的父节点。

输出描述:
最富裕的小家庭的财富和

# 最富裕的小家庭
n = int(input())
wealth = list(map(int, input().split()))
# 成员编号1~N,为和财富值的索引对应,在数组头插一个0
wealth.insert(0, 0)

# 初始化父节点的值
family = []
family.extend(wealth)

for _ in range(n - 1):
    f, c = map(int, input().split())
    # 当某父节点新增子节点时,财富值可累加
    family[f] += wealth[c]

print(max(family))

OD343.最长子字符串的长度(一)★★★★★★

题目描述:
给你一个字符串 s,首尾相连成一个环形,请你在环中找出 'o' 字符出现了偶数次最长子字符串的长度。

输入描述:
输入是一个小写字母组成的字符串

输出描述:
输出是一个整数

备注:

  • 1 ≤ s.length ≤ 500000
  • s 只包含小写英文字母
# 最长子字符串的长度(一)
s = list(map(str, input()))
k = 0
a = []
if s.count('o') % 2 == 0:
    print(len(s))
else:
    for i in range(len(s)):
        if s[i] == 'o':
            a.append(i)
    print(max(len(s[:a[-1]]), len(s[a[0]+1:])+len(s[:a[0]])))

OD345.密码输入检测★★★★★★

题目描述:
给定用户密码输入流 input,输入流中字符 '<' 表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。
密码安全要求如下:

  1. 密码长度 ≥ 8;
  2. 密码至少需要包含 1 个大写字母;
  3. 密码至少需要包含 1 个小写字母;
  4. 密码至少需要包含 1 个数字;
  5. 密码至少需要包含 1 个字母和数字以外的非空白特殊字符;

注意空串退格后仍然为空串,且用户输入的字符串不包含 '<' 字符和空白字符。

输入描述:
用一行字符串表示输入的用户数据,输入的字符串中 '<' 字符标识退格,用户输入的字符串不包含空白字符,例如:ABC<c89%000<

输出描述:
输出经过程序处理后,输出的实际密码字符串,并输出改密码字符串是否满足密码安全要求。两者间由 ',' 分隔, 例如:ABc89%00,true

# 密码输入检测
s = list(map(str, input()))
flag = [0, 0, 0, 0, 0]
to_remove = []
for i in s:
    if i == '<':
        if len(to_remove) > 0:
            to_remove.pop()
    else:
        to_remove.append(i)

# 根据密码安全要求判断
for i in range(len(to_remove)):
    if len(to_remove) >= 8:
        flag[0] = 1
    if 'a' <= to_remove[i] <= 'z':
        flag[1] = 1
    if 'A' <= to_remove[i] <= 'Z':
        flag[2] = 1
    if to_remove[i].isdigit():
        flag[3] = 1
    if not to_remove[i].isdigit() and not to_remove[i].isalpha():
        flag[4] = 1

if flag == [1, 1, 1, 1, 1]:
    print(''.join(to_remove) + ',' + 'true')
else:
    print(''.join(to_remove) + ',' + 'false')

OD350.分配土地★★★

题目描述:
从前有个村庄,村民们喜欢在各种田地上插上小旗子,旗子上标识了各种不同的数字。
某天集体村民决定将覆盖相同数字的最小矩阵形的土地分配给村里做出巨大贡献的村民,请问此次分配土地,做出贡献的村民种最大会分配多大面积?

输入描述:
第一行输入 m 和 n,

  • m 代表村子的土地的长
  • n 代表土地的宽

第二行开始输入地图上的具体标识

输出描述:
此次分配土地,做出贡献的村民种最大会分配多大面积

备注:

  • 旗子上的数字为1~500,土地边长不超过500
  • 未插旗子的土地用0标识
# 分配土地
# 输入土地的长宽,即数组的行列数
m, n = map(int, input().split())

# 输入二维数组
land = [input().split() for _ in range(m)]

# 定义一个列表用于存储
为了在Windows安装ADB工具,你可以按照以下步骤进行操作: 1. 首先,下载ADB工具包并解压缩到你自定义的安装目录。你可以选择将其解压缩到任何你喜欢的位置。 2. 打开运行窗口,可以通过按下Win+R键来快速打开。在运行窗口中输入"sysdm.cpl"并按下回车键。 3. 在系统属性窗口中,选择"高级"选项卡,然后点击"环境变量"按钮。 4. 在环境变量窗口中,选择"系统变量"部分,并找到名为"Path"的变量。点击"编辑"按钮。 5. 在编辑环境变量窗口中,点击"新建"按钮,并将ADB工具的安装路径添加到新建的路径中。确保路径正确无误后,点击"确定"按钮。 6. 返回到桌面,打开命令提示符窗口。你可以通过按下Win+R键,然后输入"cmd"并按下回车键来快速打开命令提示符窗口。 7. 在命令提示符窗口中,输入"adb version"命令来验证ADB工具是否成功安装。如果显示版本信息,则表示安装成功。 这样,你就成功在Windows安装ADB工具。你可以使用ADB工具来执行各种操作,如枚举设备、进入/退出ADB终端、文件传输、运行命令、查看系统日志等。具体的操作方法可以参考ADB工具的官方文档或其他相关教程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [windows环境安装adb驱动](https://blog.youkuaiyun.com/zx54633089/article/details/128533343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Windows安装使用ADB简单易懂教程](https://blog.youkuaiyun.com/m0_37777700/article/details/129836351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值