Форум » Циклы и ветвления » Как это решать вообще? » Ответить

Как это решать вообще?

Wally: Здравствуйте, вот задача: определите при каком наибольшем значении b в результате выполнения следующего алгоритма будет напечатано число 50? var a, b, t, k : integer; function F(x:integer) : integer; begin if x mod 3 = 0 then F:=0 else F:=1 end; BEGIN a:=20; readln(b); k:=0; for t:=a to b do k:=k + F(t); write(k) END. С чего начинать-то? Спасибо.

Ответов - 1

polyakovss: Здравствуйте, Wally! Вы пишете: С чего начинать-то? Начать нужно с понимания того, что делает функция F. Функция F(t) = 1, если t не делится на 3, и F(t) = 0, если t делится на 3. Поэтому в предложенной программе в интервале от 20 до b подсчитывается количество чисел, которые не делятся на 3. В интервале (21;36] не делятся на 3 ровно 10 чисел, а всего чисел в интервале 15. В интервале (36;51] не делятся на 3 ровно 10 чисел, а всего чисел в интервале 15. Значит, нужно 5 таких интервалов, чтобы получить 50. 15*5 = 75. 21 делится на 3. Поэтому в количество чисел, которые не делятся на 3, 21 "вклад" не сделает. 21 + 75 = 96. Таким образом, в интервале [21;96] будет ровно 50 чисел, которые не делятся на 3. При этом 96 будет наибольшим значением b, так как 50 даст и b = 95 (96 делится на 3 и "вклада" не делает). Но в задаче интервал начинается с 20. Это число увеличит количество чисел, которые не делятся на 3, на 1. Поэтому нужно отбросить число 96, которое не делает "вклада", и отбросить число 95, которое "вклад" делает. Ответ: 94.



полная версия страницы