トピックの説明
n個の正の整数a1...anがあり、それらを1行に結合し、隣接する数値を端から端まで接続して最大の整数を形成します。
説明を入力してください
最初の行には、桁数nを表す整数があります。
2行目には、指定されたn個の整数aiを表すn個の整数があります。
其中, 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.順列()
使用法:itertools.permutations(iterable、r = None)
関数:反復可能シーケンス内の要素によって生成された長さrの順列を継続的に返します(rが指定されていないかNoneの場合、rはデフォルトで反復可能の長さに設定されます。つまり、世代にはすべての要素の完全な配列が含まれます。
注:同一の要素がある場合、異なる位置にある要素は異なると見なされます。
さて、3つの要素{a、b、c}から長さ2のすべての順列を見つけたい場合は、2つの方法でそれを行うことができます。
最初のアプローチ:
from itertools import *
s = ['a','b','c']
for element in permutations(s, 2):
a = element[0] + element[1]
print(a)
2番目のアプローチ:
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()には欠陥があります。次に大きい順列を順番に出力することはできません。以下の栗を見てください:
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()関数は、パラメーターとして関数を受け取り、パラメーターとして1つ以上の反復可能オブジェクトを受け取り、イテレーターを返します。このイテレータの各要素は、イテレータに順番に適用された関数の引数の結果です。
map(function,iterable,……)
function:関数
iterable:1つ以上のiterableオブジェクト
戻り値:イテレータを返します。
たとえば、
0〜9の数値のリストを生成し、map()関数を使用してリストの各要素の2乗を計算します。コードは次のとおりです。
list1 = []
for i in range(10):
list1.append(i)
def square(x):
return x**2
list2 = map(square,list1)
print(list(list2))