Поменять порядок следования соседних цифр на противоположный
Всем привет!
Мне дали такое задание, цитирую:
Дано целое число. Образуйте новое, в котором порядок следования соседних цифр будет противоположен.
Как вы могли уже догадаться, проблемы с пониманием задачи (но если вы сразу поняли, то мое уважение). Итак, если у кого-то есть идеи, то буду рад их прочитать.
Пока накину своих мыслей. Пусть мы ввели целое число n = 1234. Тогда нам нужно, чтобы соседние цифры поменяли свой порядок следования. Причем нам нужен именно порядок, соответственно, неважно, расположены ли они друг за другом или с разрывом в несколько символов. Тогда изменим порядок цифр 1, 2 и 3, 4. Получим 2143. Но тогда порядок у цифр 2, 4 и 1, 3 будет тем же, который был в числе n, тогда меняем эти цифры местами: 4321. В этом числе мы видим, что какую бы мы пару соседних цифр не взяли, в новом числе эта пара будет отражена (12 -> 21, 23 -> 32, 34 -> 43). Что думаете?
Спасибо всем заранее)
Ответы (3 шт):
Образуйте новое, в котором порядок следования соседних цифр будет противоположен.
Я думаю, что вы правильно поняли задачу. Можно и по-другому трактовать, то есть порядок последовательности соседних цифр между каждым числом.
Пример, 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)))))
просто для разнообразия придумал такой способ развернуть целое число не прибегая к операциям со строками:
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
Что в итоге оказалось. Приведенный мною алгоритм обработки числа оказался ошибочным. Правильным же будет алгоритм, который будет переводить число 1234 в 2143. То есть каждые элементы пары двух соседних цифр буду меняться местами. Это и есть весь алгоритм. Спасибо всем, кто отозвался и пытался помочь с вопросами со своей точки зрения. Тема закрыта.