设有n个正整数,将他们连接成一排,组成一个最大的多位整数(Python)

题目描述

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

截图

 

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值