Задание EGEINF1D2ADC: Самостоятельное написание алгоритма

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Самостоятельное написание алгоритма.

Учебные темы: Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования.

Впишите правильный ответ.

Напишите в ответе число, равное количеству различных значений входной переменной k, при которых приведённая ниже программа выводит тот же ответ, что и при входном значении k = 12. Значение k = 12 также включается в подсчёт количества различных значений k. Для Вашего удобства программа приведена на пяти языках программирования.

Бейсик

DIM K, I AS LONG

INPUT K

I = 1

WHILE F(I) < K

  I = I + 1

WEND

IF F(I)- K <= K - F(I - 1) THEN

  PRINT I

ELSE

  PRINT I - 1

END IF

 

FUNCTION F(N)

  F = N * N * N

END FUNCTION


 

Python

def f(n):

  return n * n * n

i = 1

k = int(input())

while f(i) < k:

  i+=1

if (f(i)- k <= k - f(i - 1)):

  print(i)

else:

  print(i - 1)

Алгоритмический язык

алг

нач

  цел i, k

  ввод k

  i := 1

  нц пока f(i) < k

    i := i + 1

  кц

  если f(i) - k <= k - f(i - 1) то

    вывод i

  иначе

    вывод i - 1

  все

кон

алг цел f(цел n)

нач

  знач := n * n * n

кон

Паскаль

var

  k, i: longint;

 

function f(n: longint): longint;

begin

  f := n * n * n;

end;

begin

  readln(k);

  i := 1;

  while f(i) < k do

    i := i + 1;

  if f(i)- k <= k - f(i - 1) then

    writeln(i)

  else

    writeln(i - 1);

end.


 

С++

#include <iostream>

using namespace std;

 

long f(long n) {

  return n * n * n;

}

 

int main()

{

  long k, i;

  cin >> k;

  i = 1;

  while (f(i) < k)

    i++;

  if (f(i) - k <= k - f(i - 1)){

    cout << i;

  } else {

    cout << i - 1;

  }

  return 0;

}

 



i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.2 Оценка сложности вычислений. Время работы и объём используемой памяти, их зависимость от размера исходных данных. Оценка асимптотической сложности алгоритмов. Алгоритмы полиномиальной сложности. Переборные алгоритмы. Примеры различных алгоритмов решения одной задачи, которые имеют различную сложность
3.6 Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования
Тип ответа:Краткий ответ
Номер: 1D2ADC
НЕ РЕШЕНО Ответить

Решение задания EGEINF1D2ADC

Ответ: 13

Решение.
Функция f(n) вычисляет n³. Переменная i начинается с 1 и увеличивается, пока i³ меньше входного k. Для k больше 1 после цикла i³ не меньше k, а предыдущий куб (i − 1)³ меньше k.
Затем программа сравнивает расстояния от k до этих двух соседних кубов. Если расстояние до верхнего куба не больше расстояния до нижнего, печатает i; иначе печатает i − 1. При равных расстояниях выбирается верхний куб.
Для k = 12 цикл останавливается при i = 3: (2)³ = 8, 3³ = 27. Расстояния равны 27 − 12 = 15 и 12 − 8 = 4. Поэтому программа печатает 2.
Ищем все целые k с тем же результатом 2. Возможны только два случая: после цикла i = 2 и выбирается верхний куб, либо i = 3 и выбирается нижний.
1. При i = 2 значение k лежит между 1 и 8: 1 < k <= 8. Для вывода 2 требуется 8 − k <= k − 1, то есть 2k >= 9. Для целого k это означает k >= 5. Получаем 5 <= k <= 8.
2. При i = 3 имеем 8 < k <= 27. Чтобы напечатать нижний индекс 2, условие выбора верхнего должно быть ложным: 27 − k > k − 8. Отсюда 2k < 35, а для целого k — k <= 17. Получаем 9 <= k <= 17.
Два диапазона соседние; вместе это все целые k от 5 до 17 включительно. Их количество: 17 − 5 + 1 = 13. Исходное значение 12 входит в этот диапазон и учитывается.
Проверка границ. При k = 4 выбирается индекс 1, при k = 5 уже 2; при k = 17 ещё 2, при k = 18 уже 3.
Других значений нет: программа печатает только i или i − 1, значит для ответа 2 необходим один из двух разобранных индексов. При k <= 1 цикл оставляет i = 1 и результатом может быть только 0 или 1; они также не подходят.
Ответ: 13.

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF1D2ADC.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.