Здравствуйте . Помогите пожалуйста с решением задачи

Статус
Закрыто для дальнейших ответов.

МихаилБорькин

Новичок
Пользователь
Сен 1, 2020
29
0
1
#Дано четырехзначное число. Переставьте местами цифры так, чтобы сначала оказались цифры, меньшие пяти. 3671-3167 9922-2299 6791 - 1679

Помогите пожалуйста решить арифметическими действиями. Буду очень благодарен!
 

Noor

Пользователь
Пользователь
Ноя 13, 2020
85
19
8
как-то странно что у вас из 3671 получилось 3167, а не 1367.
как вариант решения

Python:
n=6791#входящее число
a=list(str(n))#разбиваем и записываем в список
a=sorted(a)#сортируем
b=("".join(a))#собираем список в новое число
print(str(n)+"="+str(b))#выводим сравнительный результат

результат
6791=1679
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример:
Python:
x = 3671
# список цифр в числе x меньше 5
x1 = [i for i in str(x) if int(i) < 5]
# список цифр в числе x больше либо равных 5
x2 = [i for i in str(x) if int(i) >= 5]
# объединяем списки в число
y = int(''.join(x1 + x2))
# выводим результат
print(x, '-', y)
 

МихаилБорькин

Новичок
Пользователь
Сен 1, 2020
29
0
1
как-то странно что у вас из 3671 получилось 3167, а не 1367.
как вариант решения

Python:
n=6791#входящее число
a=list(str(n))#разбиваем и записываем в список
a=sorted(a)#сортируем
b=("".join(a))#собираем список в новое число
print(str(n)+"="+str(b))#выводим сравнительный результат

результат
6791=1679
а если без списков, чисто арифметически решить , примерно как-то так?

x = 2442

x0 = (x//1000)
x1 = (x//100)%10
x2 = (x%100)//
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
как-то странно что у вас из 3671 получилось 3167, а не 1367.
Потому что в задаче не указано "отсортировать по возрастанию", у него они в изначальном порядке.
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
Помогите пожалуйста решить арифметическими действиями.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
а если без списков, чисто арифметически решить
Вот так можно:
Python:
x = 3671  # четырехзначное число
x2 = 0  # преобразованное число x
z = 0  # порядковый номер последней цифры меньше 5 в числе x2
# цикл от 1 до 4
for i in range(1, 5):
    # n - это следующая цифра числа x
    n = (x // 10 ** (4 - i)) % 10
    # если цифра n больше или равна 5
    if n >= 5:
        # записываем цифру n в число x2 на ее место
        x2 += n * 10 ** (4 - i)
    # если цифра n меньше 5, но стоит по порядку в числе x2
    elif n < 5 and z == i:
        # записываем цифру n в число x2 на ее место
        x2 += n * 10 ** (4 - i)
        # увеличиваем счетчик цифр меньше 5 в числе x2
        z += 1
    # если цифра n меньше 5 и стоит не по порядку в числе x2
    else:
        # освобождаем место (сдвигая цифры больше или равные 5 вправо)
        x2 = x2 - x2 % 10 ** (4 - z) + (x2 % 10 ** (4 - z) // 10)
        # записываем цифру n в число x2 на ее место
        x2 += n * 10 ** (3 - z)
        # увеличиваем счетчик цифр меньше 5 в числе x2
        z += 1
# выводим результат
print(x, '-', x2)
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
Python:
def reorder(number, cutoff=5):
    digits = []
    while number > 0:
        number, mod = divmod(number, 10)
        digits.append(mod)
    digits.reverse()
    digits = [x for x in digits if x < cutoff] + [x for x in digits if x >= cutoff]
    result = 0
    while digits:
        result *= 10
        result += digits.pop(0)
    return result
 
Статус
Закрыто для дальнейших ответов.

Форум IT Специалистов