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

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

02.01.2020, 12:04. Показов 3880. Ответов 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru