Найти в заданной серии показаний прибора минимальное произведение двух показаний - Free Pascal
Формулировка задачи:
Решение:
Собственно, вопрос: В критериях оценивания сказано, что минимальное необходимое количество - шесть(см. ниже), но я не понимаю к чему это "шесть" относится, к кол-ву элементов или, может, кол-во памяти? Правильно ли я решил задачу при поставленных критериях? Заранее спасибо.
На спутнике «Фотон» установлен прибор, предназначенный для измерения энергии космических лучей. Каждую минуту прибор передаёт по каналу связи неотрицательное вещественное число - количество энергии, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь.
Необходимо найти в заданной серии показаний прибора минимальное произведение двух показаний, между моментами передачи которых прошло не менее 6 минут. Количество энергии, получаемое прибором за минуту, не превышает 1000 условных единиц. Общее количество показаний прибора в серии не превышает 10 000.
Б. Напишите программу для решения поставленной задачи, которая будет эффективна как по времени, так и по памяти (или хотя бы по одной из этих характеристик).
Программа считается эффективной по времени, если время работы программы пропорционально количеству полученных показаний прибора N, т.е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз.
Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.
Входные данные представлены следующим образом. В первой строке задаётся число N - общее количество показаний прибора. Гарантируется, что N > 6. В каждой из следующих N строк задаётся одно неотрицательное вещественное число - очередное показание прибора.
Пример входных данных:
11
12
45.3
5.5
4
25
23
21
20
10
12
26
Программа должна вывести одно число - описанное в условии произведение. Пример выходных данных для приведённого выше примера входных данных: 48
Программа правильно работает для любых соответствующих условию входных данных. При этом не используются массивы и другие структуры данных, размер которых зависит от количества входных элементов, а время работы пропорционально этому количеству. Возможно использование массивов и динамических структур данных (например, контейнеры STL в программе на языке C++) при условии, что в них в каждый момент времени хранится фиксированное число элементов, требующих для хранения меньше 1кб (минимально необходимое количество - шесть; допускается решение с запасом).
Листинг программы
- program C4_DEMO2015B;
- const
- C = 10000000;
- var
- nums : array [1..C] of real;
- min_pr : real;
- n, m : integer;
- k : integer;
- pr : real;
- a : pinteger;
- begin
- readln(k);
- GetMem(a, k * sizeof(integer));
- for n:=0 to k-1 do readln(nums[n]);
- min_pr:=1000*10000+1;
- for n:=1 to (k-6) do
- for m:=(n+6) to k do begin
- pr:=nums[n-1]*nums[m-1];
- if (pr < min_pr) then min_pr:=pr;
- writeln(sizeof(a));
- end;
- FreeMem(a);
- writeln(min_pr:8:2);
- end.
Решение задачи: «Найти в заданной серии показаний прибора минимальное произведение двух показаний»
textual
Листинг программы
- const
- C=10000000;
- var
- nums: array [1..C] of Integer;
- ...
- readln(k);
- GetMem(a, k * sizeof(integer));
Объяснение кода листинга программы
В данном коде выполняется следующие действия:
- Объявляется константа C, которая задает размер массива nums. Значение константы C равно 10000000.
- Объявляется переменная nums типа array [1..C] of Integer. Она представляет собой массив, который будет содержать показания прибора. Размер массива равен 10 000 000.
- Запрашивается ввод числа k с клавиатуры.
- Выделяется память под массив a размером k sizeof(integer). Размер памяти, выделенной под массив, будет равен k 4 байт (так как тип данных integer занимает 4 байта).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д