Найти в заданной серии показаний прибора минимальное произведение двух показаний - 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 байта).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д