A33780. 编程实现给出一排黑色带数字的小球(数字为0到9),和一排白色带数字的小球(数字为0到9),现从两排小球中一共选取K个小球排成一排。要求:1)选出的黑色小球顺序要和原来顺序一致;2)选出的白色小球顺序要和原来顺序一致;在满足以上要求的情况下,使得K个小球排成新的一排组成的数字最大例如:黑色小球的原顺序为:白色小球的原顺序为:K为3;从两排小球中共选取3个小球,排成可以组成的最大数字为654。输入描…
填空题
困难
知识点
题目描述
编程实现
给出一排黑色带数字的小球(数字为0到9),和一排白色带数字的小球(数字为0到9),现从两排小球中一共选取K个小球排成一排。
要求:
1)选出的黑色小球顺序要和原来顺序一致;
2)选出的白色小球顺序要和原来顺序一致;
在满足以上要求的情况下,使得K个小球排成新的一排组成的数字最大
例如:
黑色小球的原顺序为:

白色小球的原顺序为:

K为3;
从两排小球中共选取3个小球,排成

可以组成的最大数字为654。
输入描述
第一行输入一组正整数,代表黑色小球,每个正整数范围为0到9,正整数之间以一个英文逗号隔开
第二行输入一组正整数,代表白色小球,每个正整数范围为0到9,正整数之间以一个英文逗号隔开
第三行输入一个正整数K(K小于等于所有小球的总数),表示从所有小球中共选取K个小球
输出描述
输出一个整数,表示按照要求选取K个小球后,组成的最大数字
样例输入
2,5,3
6,2,4,1
3
样例输出
654
参考答案
nums_black=input().split(',')
nums_black=[int(num) for num in nums_black]
nums_white=input().split(',')
nums_white=[int(num) for num in nums_white]
K=int(input())
def pick_max(nums,k):
stack=[]
drop=len(nums)-k
for num in nums:
while drop and stack and stack[-1]<num:
stack.pop()
drop-=1
stack.append(num)
return stack[: k]
def merge(A,B):
res=' '
while A or B:
bigger=A if A>B else B
res+=str(bigger.pop(0))
return int (res)
ans=max(merge(pick_max(nums_black,i),pick_max(nums_white,K-i))for i in range(K+1) if i <= len(nums_black) and K-i <= len(nums_white))
print(ans)
上一题
下一题