Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 92

Подскажите, как дописать задачку!

02.01.2020, 12:04. Показов 3774. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задано уравнение вида A + B = C, где A, B и C — неотрицательные целые числа, в десятичной записи которых некоторые цифры заменены знаками вопроса (?). Примером такого уравнения является ?2+34=4?. Требуется так подставить вместо знаков вопроса цифры, чтобы это равенство стало верным, либо определить, что это невозможно.

Входные данные
Заданное уравнение содержится в первой строке входного файла. Длина уравнения не превышает 80 символов. Входной файл не содержит пробелов.

Выходные данные
В выходной файл требуется вывести верное равенство, полученное из исходного уравнения заменой знаков вопроса цифрами, либо сообщение «решения не существует».

Пример входного файла
??2?4+9?=355

Пример выходного файла
00264+91=355

Моя идея была такова: из исходной строки сделать новые 3 строки с числами. Затем, если длины первой и второй строки равны, то на тех местах, где стоит "?" находить цифры. Если длины первой и второй строки не равны, то уравнять их, путем добавления "0" на первые места, а затем также находить цифры и в конце удалять добавленные нули.
Решить нужно без подключения модулей и библиотек.Вот что у меня уже есть:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
s = input()
k1 = s.find('+')
k2 = s.find('=')
a = s[:k1]
b = s[k1+1:k2]
c = s[k2+1:]
a=a.replace('?', '0')
b=b.replace('?', '0')
c=c.replace('?', '0')
if len(a)==len(b):
    for i in range(len(a)):
        if a[i]==0:
            a[i]=q
            q = int(c[i])-int(b[i])
            a=a.replace('0', str(q))
    for i in range(len(b)):
        if b[i]==0:
            b[i]=w
            w = int(c[i])-int(a[i])
            b=b.replace('0', str(w))
    for i in range(len(c)):
        if c[i]==0:
            c[i]=e
            e = int(a[i])+int(b[i])
            c=c.replace('0', str(e))
print (a,'+',b,'=',c)
Но нули на цифры так и не меняются. Подскажите, что не так я делаю?
Знаю, что нужно еще добавить условие, когда уравнение не будет иметь решения

Добавлено через 32 минуты
исправила:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
s = input()
k1 = s.find('+')
k2 = s.find('=')
a = s[:k1]
b = s[k1+1:k2]
c = s[k2+1:]
a=a.replace('?', '0')
b=b.replace('?', '0')
c=c.replace('?', '0')
if len(a)==len(b):
    for i in range(len(a)):
        q = int(c[i])-int(b[i])
        if a[i]=='0':
            a=a.replace('0', str(q))
    for i in range(len(b)):
        w = int(c[i])-int(a[i])
        if b[i]=='0':
            b=b.replace('0', str(w))
    for i in range(len(c)):
        e = int(a[i])+int(b[i])
        if c[i]=='0':
            c=c.replace('0', str(e))
print (a,'+',b,'=',c)
Добавлено через 16 минут
Ещё исправила:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
s = input()
k1 = s.find('+')
k2 = s.find('=')
a = s[:k1]
b = s[k1+1:k2]
c = s[k2+1:]
a=a.replace('?', '0')
b=b.replace('?', '0')
c=c.replace('?', '0')
if len(a)==len(b):
    for i in range(len(a)):
        if c[i]>b[i] and c[i]>a[i]:
            t=0
            q = int(c[i])-int(b[i])
            if a[i]=='0':
                a=a.replace('0', str(q))
            w = int(c[i])-int(a[i])
            if b[i]=='0':
                b=b.replace('0', str(w))
            for i in range (len(c)):
                e = int(a[i])+int(b[i])
                if c[i]=='0':
                    c=c.replace('0', str(e))
        else:
            t=1
if t ==1:
    print('no solution')
else:
    print (a,'+',b,'=',c)
Но не работает с цифрами типа 87+13=100, т.к. прописано с условии, что должно быть c[i]>a[i], c[i]>b[i]
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.01.2020, 12:04
Ответы с готовыми решениями:

Подскажите как можно выполнить данную задачку
Задача: Составить алгоритм и написать программу нахождения экстремального значения и/или его порядкового номера для заданных одномерных...

как дописать задачку
//Задана матрица размером М х N. Найти максимальный по модулю эле¬мент матрицы. //Переставить строки и столбцы матрицы таким образом,...

Помогите дописать задачку
Сформировать из cтолбцов матрицы В матрицу С, в которой столбцы расположены в порядке убывания модулей сумм их элементов. Матрицу первонач....

6
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
02.01.2020, 12:24
Лучший ответ Сообщение было отмечено Natali7 как решение

Решение

Хотел предложить такой вариант, но он не работает…
Python
1
2
3
4
5
6
7
>>> eval('02+34==42')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    02+34==42
     ^
SyntaxError: invalid token
А жаль…
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#s = '?2+34=4?'
s = '??2?4+9?=355'
 
def is_valid(expr):
    s, r = expr.split('=')
    a, b = s.split('+')
    return int(a) + int(b) == int(r)
 
 
width = s.count('?')
for i in range(10 ** width):
    pony = '{:0{width}}'.format(i, width=width)
    lyra = s  # copy
    for j in pony:
        lyra = lyra.replace('?', j, 1)
    if is_valid(lyra):
        print(lyra)
        break
else:
    print('fail')
1
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 92
03.01.2020, 13:14  [ТС]
Почему не работает?
вроде бы работает
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.01.2020, 13:21
Первый вариант не работает, потому что в целочисленной константе нельзя писать 02.

А второй вариант да - работает. Только для проверки пришлось писать целую функцию.
1
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 92
03.01.2020, 13:33  [ТС]
Большое спасибо!
Если идти моим способом, нужно рассмотреть 3 варианта: когда все три числа одинаковой длины (это я сделала), когда первые два числа одинаковой длины, а третье на 1 больше (для вариантов вида 87+13=100, делаю), и оставшиеся варианты?
Очень длинный код будет... но, хочу попробовать его закончить, вдруг, там будет не сильно много нюансов
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.01.2020, 13:41
Сложность в том, что знак ? может стоять где угодно и в каком угодно количестве. Например:

Python
1
s = '2?4+9?=??5'
При этом решений может быть больше чем одно.

Ещё у вас сейчас код с ошибкой и будет неправильно работать на примерах, в которых есть ноль:
Python
1
s = '2?0+9?=355'
0
0 / 0 / 0
Регистрация: 14.02.2016
Сообщений: 92
03.01.2020, 13:46  [ТС]
Да, я знаю. Если решений больше, чем одно, то нужно вывести одно из возможных
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.01.2020, 13:46
Помогаю со студенческими работами здесь

Подскажите как сделать такую задачку
В файле дана последовательность целых чисел. Для каждого элемента последовательности вычислить количество элементов слева, которые по...

подскажите пожалуйста как дорешать задачку
Линия задана уравнением. r=4/(2-3cos(Phi)).1)Построить линию по точкам начиная от фи=0 до фи=2пи и придавая фи значения через промежуток...

подскажите как дописать код
условие: по последовательному каналу передается любой числовой символ (‗0‘, ‗1‘, ‗2‘,…, ‗9‘). В ответ контроллер...

Подскажите как дописать запрос
Логически вроде все верно , но должно ли такое вообще работать $query = mysql_query(&quot;SELECT co.name, co.country_id, ci.name, ci.city_id...

подскажите как дописать прогу
я написал кусок проги но не могу закончить program LR9_1; uses crt; const n=4; m=20; type stud=record surname:string; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru