@Masteron

Python олимпиадная задача?

Число считается круглым, если на конце его стоит 0. Чем больше нулей на конце, тем более круглым считается число. Если количество нулей одинаково, то большее число считается более круглым.
Упорядочьте заданные числа по уменьшению круглости. Смотрите примеры для уточнения.

Формат файла входных данных:
В первой строке записано число n (1 ≤ n ≤ 1000). Далее в n строках записаны натуральные числа ai (1 ≤ ai ≤ 30000).

Формат файла выходных данных:
Выведите числа в требуемом порядке.

Помогите,не смекаю как их нужно отсортировать
начало у меня пока такое:
with open('round.in') as inp:
    m = [int(i) for i in inp.read().split()]
  • Вопрос задан
  • 799 просмотров
Пригласить эксперта
Ответы на вопрос 3
@arctblake
да просто создайте словарь dict = {кол-во нулей в числе: список чисел без нулей на конце}

например, число 15600 делите на 10, пока делится без остатка, то есть тут 2 раза.
# тут читаете число, делите его на 10, пока делится без остатка; в переменной a будет само число без нулей, а в переменной b - сколько раз число поделилось на 10 без остатка.
if b in dict: dict[b].append(a)
else: dict[b] = [a]
# все это делаете для каждого числа и в итоге у вас будет словарь по типу
# {1: [15, 789, 123], 2: [156, 99], ...}

ну и потом каждый внутренний список сортируете и выводите 15600, 9900, 7890, 1230, 150, то есть возвращаете нули на место и начинаете выводить со списка с наибольшим кол-вом нулей
Ответ написан
Комментировать
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
def keycalc(val):
	zeros = 0
	while val%10==0: zeros, val = zeros+1, val // 10
	return (zeros, val)

vals = [100, 10, 9900]
out = sorted(vals, key=keycalc, reverse=True)
[print(val) for val in out]
Ответ написан
Комментировать
vdm_mar
@vdm_mar
если учитывать, что потолок - 30000, нужно сделать ввод в виде строк в data
data = ['30000', '2300', '9000', '10000', '1500', '300', '25', '1222']
list_zero = [[], [], [], [], []]

def zero(a, b):
    list_zero[4-a].append(b)
    return list_zero

for i in data:
    a = len(i)-len(str(int(i[::-1])))
    zero(a, i)

for k in list_zero:
    if k: print(*sorted(k, key=int, reverse=True), end = ' ')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы