Pour l'entrée 3 30 34 5 9, la sortie du plus grand nombre attendu est: 9534330

Toutes les entrées pour lesquelles le tri renvoie le même résultat que l'entrée: 3303459?

import functools

def compare(item1, item2):
    return int(item1 + item2) - int(item2 + item1)

inputList = input().split()
sorted(inputList, key=functools.cmp_to_key(compare))
max = "".join([ x for x in inputList])
print(max)
1
Rock 20 nov. 2018 à 10:54

3 réponses

Meilleure réponse

La raison est soit parce que vous triez la liste dans le mauvais ordre et que vous n'avez pas utilisé la liste triée. Actuellement, vous triez la liste dans un ordre croissant par le premier chiffre. En plus de cela, la fonction sorted() renvoie une nouvelle liste, vous devez donc l'enregistrer dans une variable.

Vous pouvez résoudre ce problème en utilisant le reverse() sur la liste triée

import functools

def compare(item1, item2):
    return int(item1 + item2) - int(item2 + item1)

inputList = input().split()
inputList = sorted(inputList, key=functools.cmp_to_key(compare))
inputList.reverse()
max = "".join([ x for x in inputList])
print(max)

Ou changez d'opération dans la fonction compare()

import functools

def compare(item1, item2):
    return int(item2 + item1) - int(item1 + item2)

inputList = input().split()
inputList = sorted(inputList, key=functools.cmp_to_key(compare))
max = "".join([ x for x in inputList])
print(max)
2
Andreas 20 nov. 2018 à 08:07

Pour l'exhaustivité, vous pouvez également définir l'argument order dans la fonction sorted (): import functools

def compare(item1, item2):
    return int(item1 + item2) - int(item2 + item1)

input_list = input().split(",")
custom_sorted_list = sorted(input_list, key=functools.cmp_to_key(compare), reverse=True)
max = "".join([ x for x in custom_sorted_list])
print(max)
1
leoburgy 20 nov. 2018 à 08:11

La fonction triée renvoie la liste par ordre croissant.

Mais comme vous ne voulez que le plus grand nombre, c'est encore plus simple:

import itertools

input_list = [3, 30, 34, 5, 9]

answer = max(map("".join, itertools.permutations(map(str, input_list))))

print(answer)
0
Vitor SRG 20 nov. 2018 à 08:12