Так как язык не указан, приведу пример на SWI-Prolog.
Код:
read_int(Int) :- read(Int), integer(Int).split_int_by_numbers(0, []) :- !.split_int_by_numbers(N, [Number|Ints]) :- Number is mod(N, 10), RestN is div(N, 10), split_int_by_numbers(RestN, Ints).test_to_div(_, []).test_to_div(N, [Number|Ints]) :- mod(N, Number) =:= 0, test_to_div(N, Ints). test(Int) :- split_int_by_numbers(Int, Numbers), test_to_div(Int, Numbers), write(Int), write(" - Yes!"), nl.test(Int) :- write(Int), write(" - No!"), nl.?- read_int(Int), test(Int).
979 9+7=16 и 7+9=16)
169 + (пример числа 790 7+9=16 и 9+0=9 записываем 16 и 9 в порядке невозрастания (убывания) 169
163 - (чтобы получить 16 нужно сложить (9 и 7) или (8 и 8) или (7 и 9) больше нет вариантов, тогда вторая цифра (7 или 8 или 9) плюс третья цифра какого-то числа в сумме должна получиться цифра 3 (такого быть не может)
1916 - (19 не можем получить, если взять максимальные цифры 9 и 9 получим только 18)
1619 - нарушение второго пункта (должно быть записано в порядке убывания)
316 - (если рассматривать 31 и 6 не может быть и если рассматривать 3 и 16 нарушение п.2)
916 - (см пункт 2)
116 + (пример числа 651 6+5=11 и 5+1=6 записываем 11 и 6 в порядке убывания (невозрастания) 11 6)
В итоге получаем три числа