@maksim-mshp

Почему не работает программа на Python?

Здравствуйте!
Есть такая задача

Андрей готовился к ЕГЭ по информатике и встретил в демо-версии ЕГЭ 2015 года такую задачу:

Автомат получает на вход четырёхзначное число. По этому числу строится новое число по следующим правилам.

Складываются первая и вторая, а также третья и четвёртая цифры исходного числа.
Полученные два числа записываются друг за другом в порядке убывания (без разделителей).
Пример. Исходное число: 3165. Суммы: 3+1=4;6+5=11. Результат: 114.

Укажите наименьшее число, в результате обработки которого автомат выдаст число 1817.

Андрей решил, что для самопроверки он напишет программу, которая решает подобную задачу. Мы думаем, что вы тоже с этим справитесь.

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

Программа получает на вход некоторое натуральное число N, которое может содержать две, три или четыре цифры.

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

Программа должна вывести такое наименьшее целое четырёхзначное число K, после применения к которому описанного выше алгоритма получается число N. Если же такого числа не существует, программа должна вывести число 0.

Примеры

Ввод
1817

Вывод
8999

Я пробовал решить программу, но программа выдает неправильный ответ при вводе трехзначного числа. Помогите пожалуйста.
def checking(a1, a2, a3, a4):
    return int(str(int(a1) + int(a2)) + str(int(a3) + int(a4)))

v = int(input())
v_str = str(v)
v1 = str(v // 1000)
v2 = str((v % 1000) // 100)
v3 = str(((v % 1000) % 100) // 10)
v4 = str(((v % 1000) % 100) % 10)
v_n = int(v3 + v4 + v1 + v2)
ready = False
a = 1
while ready == False:
    a1 = a // 1000
    a2 = (a % 1000) // 100
    a3 = ((a % 1000) % 100) // 10
    a4 = ((a % 1000) % 100) % 10
    x = checking(a1, a2, a3, a4)
    if x == v or x == v_n:
        ready = True
    else:
        if a >= 9999:
            print(0)
            exit(0)
        else: a += 1
print(a)
  • Вопрос задан
  • 326 просмотров
Решения вопроса 1
Вариант 1 (поправленный ваш код)

def checking(a1, a2, a3, a4):
    s1 = a1 + a2
    s2 = a3 + a4
    if s1 > s2:
        return int(str(s1) + str(s2))
    else:
        return int(str(s2) + str(s1))

v = int(input())
v_str = str(v)
v1 = str(v // 1000)
v2 = str((v % 1000) // 100)
v3 = str(((v % 1000) % 100) // 10)
v4 = str(((v % 1000) % 100) % 10)
v_n = int(v3 + v4 + v1 + v2)
ready = False
a = 1000
while ready == False:
    a1 = a // 1000
    a2 = (a % 1000) // 100
    a3 = ((a % 1000) % 100) // 10
    a4 = ((a % 1000) % 100) % 10
    x = checking(a1, a2, a3, a4)
    if x == v or x == v_n:
        ready = True
        print(a)
    else:
        if a >= 9999:
            print(0)
            ready = True
        else: a += 1


Вариант 2

N = 0
while N < 10 or N > 9999: # проверка на ввод двух-, трех-, четырехзначных чисел
    print('Введите число N: ', end = '')
    N = int(input())
out = 0
if N < 1819: # число не может быть больше, т.к. 9 + 9 = 18 
    for i in range (1000, 10000):
        st = str(i)
        # как вариант: вместо деления берем цифры из строки с проверяемым числом 
        s1 = int(st[0]) + int(st[1])
        s2 = int(st[2]) + int(st[3])
        if s1 > s2:
            sum = int(str(s1) + str(s2))
        else:    
            sum = int(str(s2) + str(s1))
        if sum == N:
            out = i
            break
print(out)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Andy_U
1) В условии задачи написано, что число четырёхзначное, т.е. вам не надо уметь работать с трехзначными числами. Иначе говоря, начинайте цикл не с единицы, а с 1000.

2) Ваша функция checking неправильная (или не до конца доделанная). Прочитайте еще раз условие задачи:

Складываются первая и вторая, а также третья и четвёртая цифры исходного числа.
Полученные два числа записываются друг за другом в порядке убывания (без разделителей).
Пример. Исходное число: 3165. Суммы: 3+1=4;6+5=11. Результат: 114.
Ответ написан
adugin
@adugin Куратор тега Python
print(*map(str, sorted(eval('[{}+{},{}+{}]'.format(*input())), reverse=True)), sep='')
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
02 апр. 2020, в 16:49
15000 руб./за проект
02 апр. 2020, в 16:41
2000 руб./за проект
02 апр. 2020, в 16:33
10000 руб./за проект