Определить количество чисел, для которых программа выведет такой же результат, что и для заданного числа - Pascal
Формулировка задачи:
[ЕГЭ] 21 задание
По какому алгоритму решать подобные задания? Неужели сидеть и все пересчитывать.
Определите, количество чисел K, для которых следующая программа выведет такой же результат, что и для K =
17?
var i, k: integer; function F(n:integer):integer; begin F:=n*n*n+5*n*n; end; begin readln(k); i := 1; while f(i) < K do i:=i+1; if f(i)-k<=k-2*f(i-1) then writeln(i) else writeln(i-1); end.
Решение задачи: «Определить количество чисел, для которых программа выведет такой же результат, что и для заданного числа»
textual
Листинг программы
program test; var i, k: integer; function F(n: integer): integer; begin F := n * n * n + 5 * n * n; end; begin for k := 1 to 28 do begin Write(K: 2, ' '); i := 1; while f(i) < K do i := i + 1; Write(i, ' '); if f(i) - k <= k - 2 * f(i - 1) then writeln(i) else writeln(i - 1); end; end.
Объяснение кода листинга программы
- Объявляется программа с названием
test. - Объявляются переменные
iиkцелочисленного типа. - Объявляется функция
Fс входным параметромnцелого типа, которая возвращает целое число. - Внутри функции
Fпроисходит вычисление значения по формуле:n * n * n + 5 * n * n. - Начинается выполнение основной программы.
- Происходит цикл
forот 1 до 28. - Для каждого значения
kвыполняется следующее:- Выводится значение
k. - Присваивается значение
iравное 1. - Выполняется цикл
whileпока значение функцииF(i)меньше чемk: ---iувеличивается на 1. - Выводится значение
i. - Если разница между значением функции для текущего
iиkменьше или равна разнице междуkи удвоенной функции от (i-1), то выводится значениеi, иначе выводится значение(i-1). Код рассчитан на вычисление и вывод количества чисел, для которых программа выведет такой же результат, что и для заданного числаk.
- Выводится значение