Python 数串(华为机试)

题目描述

设有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

猜你喜欢

转载自blog.csdn.net/TCatTime/article/details/82119167