笔试-最小组合数
应用
给一个数组,数组里面都是代表非负整数的字符串,将数组里所有的数值排列组合拼接起来组成一个数字,输出拼接成的最小的数字。
输入:
一个数组,数组不为空,数组里面都是代表非负整数的字符串,可以是 0 开头。
例如:[“13”,“045”,“09”,"56”],数组的大小范围: [1,50],数组中每个元素的长度范围: [1,30]
输出:以字符串的格式输出一个数字。
如果最终结果是多位数字,要优先选择输出不是“0”开头的最小数字;
如果拼接出来的数字都是“0”开头,则选取值最小的,并且把开头部分的“0”都去掉再输出;
如果是单位数“0”,可以直接输出“0”;
实现
strs = input("请输入非负整数的字符串:").split()
a = [i for i in strs]
# print(a)arr = []for i in range(0, len(a)):temp1 = []temp2 = []temp1.append(a[i])temp2.append(a[i])for j in range(0, len(a)):if j != i:temp1.append(a[j])for k in range(len(a)-1, -1, -1):if k != i:temp2.append(a[k])arr.append(temp1)arr.append(temp2)
# print(arr)merge = []
for i in range(0, len(arr)):s = str()for j in range(0, len(arr[i])):s = s + arr[i][j]merge.append(s)
# print(merge)start_without_zero = []
start_with_zero = []for i in range(0, len(merge)):if merge[i][0] != "0":start_without_zero.append(merge[i])else:start_with_zero.append(merge[i])# 结果都以0开头
if len(start_with_zero) == len(merge):start_with_zero.sort()print(start_with_zero[0][1:])# 不都是以0开头
else:start_without_zero.sort()print(start_without_zero[0])
请输入非负整数的字符串:20 1
120请输入非负整数的字符串:08 10 2
10082请输入非负整数的字符串:01 02
102