Уведомления

Группа в Telegram: @pythonsu

#1 Март 27, 2020 12:34:42

ElmarB
Зарегистрирован: 2020-02-24
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача. Числа в словарном порядке

Привет, помогите с задачей.
Не получается отсортировать.

Задача
Напечатайте входную последовательность натуральных чисел, отсортировав ее по возрастанию сначала единиц, потом десятков, потом сотен и тп.

Входные данные

Целое число 0 < N ≤ 1000. Затем N натуральных чисел, не превышающих 30000, через пробел.

Выходные данные

Числа по возрастанию единиц, при равных единиц - по возрастанию десятков, при равных единицах и десятков - по возрастанию сотен и тп.

Примеры

Вход
5
5 23 3 43 123
Выход
3 23 123 43 5

Офлайн

#2 Март 27, 2020 14:17:32

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Задача. Числа в словарном порядке

Как вариант, переводи числа в строки, переворачивай их, сортируй, и переворачивай обратно.



Отредактировано Striver (Март 27, 2020 14:17:58)

Офлайн

#3 Март 27, 2020 18:12:00

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Задача. Числа в словарном порядке

 >>> s = [5, 23, 3, 43, 123]
>>> sorted(s, key=lambda x: (x%10, x%100))
[3, 23, 123, 43, 5]



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#4 Март 27, 2020 21:30:50

ElmarB
Зарегистрирован: 2020-02-24
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача. Числа в словарном порядке

Striver
Как вариант, переводи числа в строки, переворачивай их, сортируй, и переворачивай обратно.

Спасибо, это реально помогло.
Вот что получилось. Возможно можно было бы покороче, но всё же
 a = input()
e = ''
A = []
B = []
for i in range(len(a)):
	if a[i] != ' ':
		e +=a[i]
	if a[i] == ' ':
		A.append(e)
		A1 = ''
A.append(e)
for i in range(len(A)):
	B.append(A[i][::-1])
B.sort()
C = []
for i in range(len(B)):
	C.append(int(B[i][::-1]))
	print(C[i], end=' ')

Отредактировано ElmarB (Март 27, 2020 23:26:03)

Офлайн

#5 Ноя. 22, 2021 22:03:27

OlegFac
Зарегистрирован: 2021-11-22
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Задача. Числа в словарном порядке

2 дня тупил, потом сделал сначала перемудрив вот так:

 n = int(input())
a = str(input()).split(' ')
def comparator(a1, b1):
    if      a1[4] > b1[4] or  (a1[4] == b1[4] and a1[3] > b1[3]) or (
            a1[4] == b1[4] and a1[3] == b1[3] and a1[2] > b1[2]) or (
            a1[4] == b1[4] and a1[3] == b1[3] and a1[2] == b1[2] and a1[1] > b1[1]) or (
            a1[4] == b1[4] and a1[3] == b1[3] and a1[2] == b1[2] and a1[1] == b1[1] and a1[0] > b1[0]):
        return True
    return False
for p1 in range(n - 1):
    for p2 in range(p1 + 1, n):
        if comparator((5-len(a[p1]))*'0'+a[p1], (5-len(a[p2]))*'0'+a[p2]):
            a[p1], a[p2] = a[p2], a[p1]
for i in a:
    print(i, end=' ')

а потом подумав и поняв что строки сравниваются именно так, как того требует задача - исправился на простое решение:
 n = int(input())
a = str(input()).split(' ')
for p1 in range(n - 1):
    for p2 in range(p1 + 1, n):
        if a[p1][::-1] > a[p2][::-1]:
            a[p1], a[p2] = a[p2], a[p1]
for i in a:
    print(i, end=' ')

ПРОФИТ
N Результат Время (с) Баллы
1 OK 0.037 1 (1)
2 OK 0.037 1 (1)
3 OK 0.037 1 (1)
4 OK 0.037 1 (1)
5 OK 0.042 1 (1)
6 OK 0.470 1 (1)

Отредактировано OlegFac (Ноя. 22, 2021 22:06:44)

Офлайн

#6 Ноя. 23, 2021 18:52:13

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Задача. Числа в словарном порядке

 _ = input()
print(sorted(input().split(), key = lambda x : x[::-1]))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version