题目描述
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
输入描述:
有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。
代码思想:
1.输入
例如我们是4个数字
12 15 666 777
2.我们把每个数的位数分开来,然后组成一个列表
[[1,2],[1,5],[6,6,6],[7,7,7]]
3.我们计算每个元素的位数,存放在一个新的列表
[2,2,3,3]
4.因为我们是比大小,但是又是按最高位依次往后的,所以我们让每个数字对齐,那么我们又有了一个新的列表
[[1,2,0][1,5,0][6,6,6][7,7,7]]
5,这样我们很快得出的顺序
777,666,150,120,即排序的下标为4,3,2,1
6.然后得到了排序下标之后,我们根据下标来显示最开始的列表
7776661512
代码实现(python)
#!D:/workplace/python
# -*- coding: utf-8 -*-
# @File : Test.py
# @Author: WangYe
# @Date : 2019/1/9
# @Software: PyCharm
# N = input()
#
# num = input()
#num1 = num.split(" ") #list形式的输入
import copy
N = int(input())
num = input()
num = num.split(" ")
#print(type(num))
num1 = copy.deepcopy(num)
last_list = []
#print(type(num1))
last_list_len = []
for i in range(int(N)):
temp = int(num1[i])
temp_every_len = 0
#print(temp)
while temp > 1: #取最高位数,7 13 4 246的最高位数是3
temp = temp /10
#print("aa",temp)
temp_every_len += 1
#print("位数",temp_every_len)
last_list_len.append(temp_every_len)
now_num = int(num1[i]) # 当前计算数字
temp_list = []
for k in range(temp_every_len):
m = temp_every_len - k #反向循环,从最高位到最低位开始遍历切分 3
beishu = 1
for u in range(m-1):
beishu = beishu * 10
#print(u,m,beishu)
#print(beishu)
weishu = int(now_num/beishu)
#print(weishu)
temp_list.append(weishu)
#print(temp_list)
now_num = now_num - (weishu*beishu)
last_list.append(temp_list)#拿到最终列表 7 13 4 246 的最终列表是 [[7],[1,3]...[2,4,6]]
#print(last_list_len)
last_list_len.sort(reverse=True)
maxlen = last_list_len[0]
#print(last_list_len)
temp_list_sort = last_list
#print("num",num)
res=num
for i in range(N): #位数补全 全部为最高位数
if len(temp_list_sort[i]) == int(maxlen):
#print("aa",len(temp_list_sort[i]),maxlen)
continue
else:
#print("bb", len(temp_list_sort[i]), maxlen)
#print("i",i)
for k in range(maxlen-len(temp_list_sort[i])):
num1[i] *=10
# print("num1",num1)
# print("res",res)
b=sorted(enumerate(num1), key=lambda x:x[1],reverse=True)
#print(b)
laststr = ""
for k in range(N):
laststr = laststr + str(num[b[k][0]])
#print("11",laststr)
print(laststr)
截图