Предмет: Информатика, автор: Fintle

Вася написал код для решения некоторой задачи. Приводим его на трех языках программирования:

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?

Ответы

Автор ответа: timus2000
2
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.

Fintle: Спасибо! Вы мне очень помогли!)
timus2000: Ну ок)
Похожие вопросы
Предмет: Алгебра, автор: Nastyasans
Предмет: Математика, автор: 290808
Предмет: Геометрия, автор: ЯНЕПТИЧКААЦТАНЬ