华为OD机试分享20220627
作者:忍无限
链接:https://www.nowcoder.com/discuss/974077?toCommentId=13387871
来源:牛客网
链接:https://www.nowcoder.com/discuss/974077?toCommentId=13387871
来源:牛客网
第一题 字符串分割-水仙花数
题目描述
给定非空字符串s,将该字符串分割成一些子串,使每个子串的ASCII码值的和均为水仙花数。
1、若分割不成功,则返回0
2、若分割成功且分割结果不唯一,则返回-1
3、若分割成功且分割结果唯一,则返回分割后子串的数目
输入描述
输入字符串的最大长度为200
答案参加这个大佬的。
第二题
小华是个很有对数字很敏感的小朋友,他觉得数字的不同排列方式有特殊美感。某天,小华突发奇想,如果数字多行排列,第一行1个数,第二行2个,第三行3个,即第n行有n个数字,并且奇数行正序排列,偶数行逆序排列,数字依次累加。这样排列的数字一定很有意思。聪明的你能编写代码帮助小华完成这个想法吗?
————————————————
————————————————
import sys
arr = []
for line in sys.stdin.readlines():
if line == '\n':
break
arr.append(list(map(int, line.split(' '))))
if len(arr) == 1:
print(arr[0])
arr.sort(key=lambda x: x[0])
comm_section = []
for i in range(len(arr) - 1):
for j in range(i + 1, len(arr)):
if arr[i][-1] >= arr[j][0]:
comm_section.append([arr[j][0], min(arr[i][-1], arr[j][-1])])
if len(comm_section) == 1:
print(comm_section)
comm_section.sort(key=lambda x: x[0])
l = len(comm_section)
i = 0
while i <= l-2:
if comm_section[i][-1] > comm_section[i+1][0]:
comm_section[i][-1] = max(comm_section[i][-1], comm_section[i+1][-1])
comm_section.pop(i+1)
l-=1
else:
i+=1
print(comm_section) 答案参考这个大佬的,写了python版本。
第三题
区间重叠问题
给定一组闭区间,其中部分区间存在交集。任意两个给定区间的交集,称为公共区间(如:[1,2],[2,3]的公共区间为[2,2],[3,5],[3,6]的公共区间为[3,5])。公共区间之间若存在交集,则需要合并(如:[1,3],[3,5]区间存在交集[3,3],须合并为[1,5])。按升序排列输出合并后的区间列表。
输入描述:
一组区间列表,
区间数为N:
0 <= N <= 1000;
区间元素为X:
-10000 <= X <= 10000。
输出描述:
升序排列的合并后区间列表
示例1
输入
0 3
1 3
3 5
3 6
输出
1 5
说明
[0,3]和[1,3]的公共区间为[1,3],[0,3]和[3,5]的公共区间为[3,3],[0,3]和[3,6]的公共区间为[3,3],[1,3]和[3,5]的公共区间为[3,3],[1,3]和[3,6]的公共区间为[3,3],[3,5]和[3,6]的公共区间为[3,5],公共区间列表为[[1,3],[3,3],[3,5]];[1,3],[3,3],[3,5]存在交集,须合并为[1,5]。
答案参考某个大佬的,写了python版本。
给定一组闭区间,其中部分区间存在交集。任意两个给定区间的交集,称为公共区间(如:[1,2],[2,3]的公共区间为[2,2],[3,5],[3,6]的公共区间为[3,5])。公共区间之间若存在交集,则需要合并(如:[1,3],[3,5]区间存在交集[3,3],须合并为[1,5])。按升序排列输出合并后的区间列表。
输入描述:
一组区间列表,
区间数为N:
0 <= N <= 1000;
区间元素为X:
-10000 <= X <= 10000。
输出描述:
升序排列的合并后区间列表
示例1
输入
0 3
1 3
3 5
3 6
输出
1 5
说明
[0,3]和[1,3]的公共区间为[1,3],[0,3]和[3,5]的公共区间为[3,3],[0,3]和[3,6]的公共区间为[3,3],[1,3]和[3,5]的公共区间为[3,3],[1,3]和[3,6]的公共区间为[3,3],[3,5]和[3,6]的公共区间为[3,5],公共区间列表为[[1,3],[3,3],[3,5]];[1,3],[3,3],[3,5]存在交集,须合并为[1,5]。
import sys
arr = []
for line in sys.stdin.readlines():
if line == '\n':
break
arr.append(list(map(int, line.split(' '))))
if len(arr) == 1:
print(arr[0])
arr.sort(key=lambda x: x[0])
comm_section = []
for i in range(len(arr) - 1):
for j in range(i + 1, len(arr)):
if arr[i][-1] >= arr[j][0]:
comm_section.append([arr[j][0], min(arr[i][-1], arr[j][-1])])
if len(comm_section) == 1:
print(comm_section)
comm_section.sort(key=lambda x: x[0])
l = len(comm_section)
i = 0
while i <= l-2:
if comm_section[i][-1] > comm_section[i+1][0]:
comm_section[i][-1] = max(comm_section[i][-1], comm_section[i+1][-1])
comm_section.pop(i+1)
l-=1
else:
i+=1
print(comm_section) 答案参考某个大佬的,写了python版本。


查看30道真题和解析