蓝桥杯精选赛题系列——暴力拼数

题目描述

设有 n个正整数 a1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。

输入描述

第一行有一个整数,表示数字个数 n。

第二行有 n个整数,表示给出的 n个整数 ai 。

其中, 1 <= n <= 20,1<= ai <= 10^9。

输出描述

输出一个正整数,表示最大的整数

输入输出样例

示例 1

输入

3
13 312 343

输出

34331213

示例 2

输入

4
7 13 4 246

输出

7424613

解答方法及其详细解释

from itertools import *
n =int( input())  
list2 = []    //创建一个空列表
list1 = list(  map(str, input().split() )   ) 
for s in permutations(list1):
    a = ' '.join(s)
    list2.append(a)
print(max(list2))

这段代码逻辑并不复杂,主要是通过这段代码,来介绍几个重要的函数:

1.permutations()

使用:itertools.permutations(iterable, r = None)
功能:连续返回由 iterable序列中的元素生成的长度为r的排列(如果 r 未指定或为 None,r默认设置为 iterable的长度,即生成包含所有元素的全排列。
注意:如果有相同的元素,不同位置的元素被认为不同。

来个栗子吧,如果我要从三个元素 {a,b,c} 中求出长度为 2 的所有排列,我们可以用以下两种做法:

第一种做法:

from itertools import *
s = ['a','b','c']
for element in permutations(s, 2):
    a = element[0] + element[1] 
    print(a)

第二种做法:

from itertools import *
s = ['a','b','c']
for element in permutations(s,2):
    a=''.join(element)    #把所有元素拼起来 
    print(a)

两种方法的运行结果都是:

ab
ac
ba
bc
ca
cb

如果把第 3行的 permutations(s,2) 改为 permutations(s),就是对所有元素做全排列。
除此之外 permutations() 有个缺陷:它不能按顺序输出下一个更大的排列。看下面的栗子:

from itertools import *
s = ['1','3','2']
for element in permutations(s):
    a=''.join(element)    #把所有元素拼起来 
    print(a)

输出结果为:

132
123
312
321
213
231

可见,虽然它输出了所有的排列,但不是按从小到大的顺序输出的。这使得 permutations() 在某些需要按顺序输出的场景中受到了限制。不过,如果从最小的排列开始,permutations() 还是能按顺序从小到大输出的。所以可以先排序得到最小排列,然后再使用 permutations()。
2.map()
map()函数接收一个函数为参数和一个或多个可迭代对象为参数,返回一个迭代器。此迭代器中的每个元素都是函数参数依次作用于可迭代对象后的结果。

map(function,iterable,……)

function:函数
iterable :一个或多个可迭代对象
返回值:返回迭代器。

举个栗子
生成0-9的数字列表,然后通过map()函数对该列表每一个元素的平方计算,代码如下:

list1 = []
for i in range(10):
	list1.append(i)
def square(x):
	return x**2
list2 = map(square,list1)
print(list(list2))
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wzyannn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值