В
Все
М
Математика
О
ОБЖ
У
Українська мова
Х
Химия
Д
Другие предметы
Н
Немецкий язык
Б
Беларуская мова
М
Музыка
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
У
Українська література
Р
Русский язык
Ф
Французский язык
П
Психология
О
Обществознание
А
Алгебра
М
МХК
Г
География
И
Информатика
П
Право
А
Английский язык
Г
Геометрия
Қ
Қазақ тiлi
Л
Литература
И
История
Такблэт228
Такблэт228
12.03.2021 19:57 •  Информатика

Вуравнении вида 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

Показать ответ
Ответ:
bale2017
bale2017
20.07.2020 23:22
// 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
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота