Вася написал код для решения некоторой задачи. Приводим его на трех языках программирования:
Python:
n = int(input())
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?
Answers & Comments
При первом запуске условие не выполниться, поэтому переменная 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.