题目描述
设有n个正整数,将它们连成一排,组成一个最大的多位整数。
输入描述:第一行为一个整数N,第二行包含N个数。
输出描述:输出一个表示最大的整数。
输入样例
2
12
123
输出样例
12312
题目分析
将输入的数字字符串存储到一个列表中。每次找出列表中一个最合适的数字构建最大的数,将这个数字放入输出结果的字符串变量中。每次找出最大的数后,将列表中该元素删除,直至列表中没有元素。输出最后的结果。
测试样例
1. 输入的N小于或等于0;
2. 输入的字符串数字中有非数字字符;
3. 输入的字符串数字的数量大于N。
代码展示
amount = int(input())
numbers = input().split()
if amount <= 0:
exit()
numbers = numbers[0:amount]
for element in numbers:
if element.isdigit():
continue
else:
exit()
result = ''
while len(numbers) > 0:
max_number = numbers[0]
for element in numbers:
if int(max_number + element) < int(element + max_number):
max_number = element
result = result + max_number
numbers.remove(max_number)
print(result)
注意事项
将输入的字符转成整形后排序在拼接会导致错误的结果。因为题目要想组成最大的数,应尽可能使位权大的数字排列在前面。但是用sort()函数或者sorted()的无参函数也会导致错误的结果。例如输入数据:23,982, 93,935,93。在使用sort()函数排序,倒序组合后,输出的结果是:982935939323,而正确的结果却是 982939393523。
传送门
1. exit()函数:https://blog.csdn.net/TCatTime/article/details/82080093
2. split()函数:https://blog.csdn.net/TCatTime/article/details/82053259