Поменять порядок следования соседних цифр на противоположный

Всем привет!

Мне дали такое задание, цитирую:

Дано целое число. Образуйте новое, в котором порядок следования соседних цифр будет противоположен.

Как вы могли уже догадаться, проблемы с пониманием задачи (но если вы сразу поняли, то мое уважение). Итак, если у кого-то есть идеи, то буду рад их прочитать.

Пока накину своих мыслей. Пусть мы ввели целое число n = 1234. Тогда нам нужно, чтобы соседние цифры поменяли свой порядок следования. Причем нам нужен именно порядок, соответственно, неважно, расположены ли они друг за другом или с разрывом в несколько символов. Тогда изменим порядок цифр 1, 2 и 3, 4. Получим 2143. Но тогда порядок у цифр 2, 4 и 1, 3 будет тем же, который был в числе n, тогда меняем эти цифры местами: 4321. В этом числе мы видим, что какую бы мы пару соседних цифр не взяли, в новом числе эта пара будет отражена (12 -> 21, 23 -> 32, 34 -> 43). Что думаете?

Спасибо всем заранее)


Ответы (3 шт):

Автор решения: Tehnorobot

Образуйте новое, в котором порядок следования соседних цифр будет противоположен.

Я думаю, что вы правильно поняли задачу. Можно и по-другому трактовать, то есть порядок последовательности соседних цифр между каждым числом. Пример, 1 2 3 - > 3 2 1

Если вы хотите реализовать решение задачи на Python, то предложу следующее:

n = list(input()) 

count = 0

while count < len(n) - 1:
    n[count], n[count + 1] = n[count + 1], n[count]
    count += 1
print(int(''.join(n)))

Кстати, данная задача похожа на метод сортировки 'пузырьком', только соседние цифры меняются между собой в случае, если первая больше второго:

a = list(map(int, list(input())))
N = len(a)
for i in range(N - 1):
    for j in range(N - i - 1):
        if a[j] > a[j + 1]:
            a[j], a[j + 1] = a[j + 1], a[j]
 
print(a)
print(int(''.join(list(map(str, a)))))
→ Ссылка
Автор решения: SergFSM

просто для разнообразия придумал такой способ развернуть целое число не прибегая к операциям со строками:

n = 12345
f = lambda x: [x] if x<10 else f(x//10) + [x%10]
n = sum(j*10**i for i,j in enumerate(f(n)))
print(n)  # 54321
→ Ссылка
Автор решения: Рик Plays

Что в итоге оказалось. Приведенный мною алгоритм обработки числа оказался ошибочным. Правильным же будет алгоритм, который будет переводить число 1234 в 2143. То есть каждые элементы пары двух соседних цифр буду меняться местами. Это и есть весь алгоритм. Спасибо всем, кто отозвался и пытался помочь с вопросами со своей точки зрения. Тема закрыта.

→ Ссылка