Вася написал код для решения некоторой . приводим его на трех языках программирования: python: n = int( ans = 0 i = 0 while n > 0: if i % 2 == 1 and n % 10 % 2 == 0: ans += 1 n //= 10 i += 1 print(ans) pascal: var n, i, ans: longint; begin readln(n); ans : = 0; i : = 0; while n > 0 do begin if (i mod 2 = 1) and (n mod 10 mod 2 = 0) then ans : = ans + 1; n : = n div 10; i : = i + 1; end; writeln(ans); end. c++: #include using namespace std; int main() { int n, ans = 0, i = 0; cin > > n; while (n > 0){ if (i % 2 == 1 and n % 10 % 2 == 0) ans++; n /= 10; i++; } cout < < ans; return 0; } а теперь ему стало интересно: при каком наименьшем n его программа выведет в качестве ответа число 3?

dimonshegolev dimonshegolev    1   22.09.2019 20:50    2

Ответы
krivobokova45 krivobokova45  27.08.2020 01:59
200000, насколько я понял.Если вы дочитаете это - респект.%)

 При первом запуске условие не выполниться, поэтому переменная ans останется прежней( в таком случае нам безразлично значение единиц числа n, и мы ставим наименьшее - 0), в этом же цикле от числа n убираются единицы и к переменная i увеличивается на 1.
Цикл начинается по новой, теперь условие выполняется( i делится на 2 с остатком 1), но также на два должны без остатка делится и десятки числа n(опять берем наименьшее число 0) переменная ans увеличивается на 1.
В следующем цикле условие опять не выполняется, i увеличивается на 1, от n убираются сотни(сотни числа n равны 0)
В четвертом цикле asn и i увеличиваются на 1, тысячи числа n опять же равны 0.
В 5-ом цикле условие не выполняется, i увеличивается на 1, десятки тысяч числа n равны 0.
И наконец в шестом цикле переменная asn увеличится на 1, но при том условии,что сотни тысяч числа n делятся на 2 без остатка - ноль здесь уже не подходит, поскольку число не может начинаться с нуля. Берем 2.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика