после выполнения шага 1 на столе лежит яблоко, которое достали из корзины первым, а вторая корзина пуста. после каждого выполнения шага 2 большее яблоко перемещается в корзину, а меньшее остается на столе. в результате на столе окажется самое маленькое яблоко.
при обосновании корректности циклических алгоритмов полезно использовать понятие инварианта цикла. в случае алгоритма инвариантом цикла является такое условие «лежащее на столе яблоко — самое маленькое из всех взятых до сих пор». в начале алгоритма условие очевидно выполняется (любое яблоко удовлетворяет этому условию). условие остается истинным на каждом шаге в соответствии с правилами. таким образом, в конце алгоритма, когда все яблоки взяты, получим самое маленькое яблоко из всех.
Так как язык не указан, приведу пример на 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).ответ:
после выполнения шага 1 на столе лежит яблоко, которое достали из корзины первым, а вторая корзина пуста. после каждого выполнения шага 2 большее яблоко перемещается в корзину, а меньшее остается на столе. в результате на столе окажется самое маленькое яблоко.
при обосновании корректности циклических алгоритмов полезно использовать понятие инварианта цикла. в случае алгоритма инвариантом цикла является такое условие «лежащее на столе яблоко — самое маленькое из всех взятых до сих пор». в начале алгоритма условие очевидно выполняется (любое яблоко удовлетворяет этому условию). условие остается истинным на каждом шаге в соответствии с правилами. таким образом, в конце алгоритма, когда все яблоки взяты, получим самое маленькое яблоко из всех.
подробнее - на -
объяснение: