
Вопрос задан 07.09.2023 в 05:01.
Предмет Информатика.
Спрашивает Обласов Максим.
В уравнении вида A + B = C, где A, B и C — неотрицательные целые числа, некоторые цифры заменены на
знаки вопроса. Необходимо подставить вместо знаков вопроса такие десятичные цифры, чтобы уравнение стало верным, либо определить, что это невозможно. На входе подаётся единственная строка текста — уравнение с вопросительными знаками. Длина уравнения не превышает 200 символов. Входные данные не содержат никаких символов, кроме десятичных цифр, вопросительных знаков, символа «плюс» и символа «равно». Кроме того, после конца строки может следовать символ перевода строки. На стандартный поток вывода напечатайте уравнение с подставленными вместо знаков вопроса цифрами, если решение существует, и выведите единственное слово No, если решения нет. Если задача допускает несколько решений, выводите любое. В ответе разрешены ведущие нули (см. примеры). Примеры Входные данные Результат работы ?2+34=4? 12+34=46 ?2+34=47 No ??2?4+9?=355 00264+91=355

Ответы на вопрос

Отвечает Глущук Кристиночка.
// F#
open System
let anyNumberSymbol = "?"
let replaceSymbolOnIndex (str:string) (number:int) (index:int) =
String.Format("{0}{1}{2}", str.Substring(0, index), number, str.Substring(index+1))
let rec getAllValues (valueStr:string) =
let index = valueStr.IndexOf(anyNumberSymbol)
if index > -1
then
let newStrings =
[0..9]
|> Seq.map (fun x -> replaceSymbolOnIndex valueStr x index)
newStrings |> Seq.collect (fun x -> getAllValues x)
else
[valueStr] |> List.toSeq
let getResults (numbers:string list) =
List.nth numbers 0
|> getAllValues
|> Seq.map (fun firstNumber ->
List.nth numbers 1
|> getAllValues
|> Seq.map (fun secondNumber ->
List.nth numbers 2
|> getAllValues
|> Seq.map (fun resultNumber ->
if Int32.Parse(firstNumber) + Int32.Parse(secondNumber) = Int32.Parse(resultNumber)
then [String.Format("{0} + {1} = {2}", firstNumber, secondNumber, resultNumber)]
else []
)
|> Seq.collect (fun x -> x)
)
|> Seq.collect (fun x -> x)
)
|> Seq.collect (fun x -> x)
|> Seq.toArray
[<EntryPoint>]
let main argv =
let inputString = System.Console.ReadLine()
let numbers = inputString.Split('+', '=') |> Array.map (fun x -> x.Trim())
if numbers.Length = 3
then
let results = getResults (numbers |> Array.toList)
if results.Length > 0
then Console.WriteLine(results |> Seq.fold (fun result x -> result + "\n" + x) "")
else Console.WriteLine("No results")
Console.ReadKey(true) |> ignore
0
else
1
open System
let anyNumberSymbol = "?"
let replaceSymbolOnIndex (str:string) (number:int) (index:int) =
String.Format("{0}{1}{2}", str.Substring(0, index), number, str.Substring(index+1))
let rec getAllValues (valueStr:string) =
let index = valueStr.IndexOf(anyNumberSymbol)
if index > -1
then
let newStrings =
[0..9]
|> Seq.map (fun x -> replaceSymbolOnIndex valueStr x index)
newStrings |> Seq.collect (fun x -> getAllValues x)
else
[valueStr] |> List.toSeq
let getResults (numbers:string list) =
List.nth numbers 0
|> getAllValues
|> Seq.map (fun firstNumber ->
List.nth numbers 1
|> getAllValues
|> Seq.map (fun secondNumber ->
List.nth numbers 2
|> getAllValues
|> Seq.map (fun resultNumber ->
if Int32.Parse(firstNumber) + Int32.Parse(secondNumber) = Int32.Parse(resultNumber)
then [String.Format("{0} + {1} = {2}", firstNumber, secondNumber, resultNumber)]
else []
)
|> Seq.collect (fun x -> x)
)
|> Seq.collect (fun x -> x)
)
|> Seq.collect (fun x -> x)
|> Seq.toArray
[<EntryPoint>]
let main argv =
let inputString = System.Console.ReadLine()
let numbers = inputString.Split('+', '=') |> Array.map (fun x -> x.Trim())
if numbers.Length = 3
then
let results = getResults (numbers |> Array.toList)
if results.Length > 0
then Console.WriteLine(results |> Seq.fold (fun result x -> result + "\n" + x) "")
else Console.WriteLine("No results")
Console.ReadKey(true) |> ignore
0
else
1



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Для решения этой задачи, мы можем перебирать все возможные значения от 0 до 9 для знаков вопроса и проверять, выполняется ли уравнение. Вот Python-код, который решает эту задачу:
pythonequation = input().strip()
for digit1 in range(10):
for digit2 in range(10):
# Разбиваем уравнение на части A, B и C, заменяя вопросительные знаки на текущие цифры
a, rest = equation.split('+', 1)
b, c = rest.split('=', 1)
a = a.replace('?', str(digit1))
b = b.replace('?', str(digit2))
c = c.replace('?', str(digit1 + digit2))
# Проверяем, является ли полученное уравнение верным
if int(a) + int(b) == int(c):
print(f'{a}+{b}={c}')
exit()
# Если не нашли подходящего решения, выводим "No"
print('No')
Вы можете запустить этот код, введя уравнение в формате, указанном в задаче, и он выдаст ответ с подставленными цифрами или "No", если решение не существует.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili