Другие языки программирования и технологии
помогите с информатикой (pascal ABC)\ 10 класс
В массиве из n положительных натуральных чисел, найти кол-во пар, произведение пар чисел которых кратно 6, а числа стоят друг от друга не менее чем на 6 позиций. Программа должна быть эффективной по памяти и по времени. Эффективная программа считается та, которая при увеличении N в K раз увеличивается время и память. Сначала не эффективная программа. Чтобы написать эффективную программу, не надо использовать массив.
Произведение чисел кратно 6, если одно из чисел кратно 6 или если одно число кратно 2, а второе число кратно 3. Так что достаточно хранить три счётчика предшествующих чисел:
1. количество чисел, кратных 6
2. количество чисел, кратных 3
3. количество чисел, кратных 2
Причём эти счётчики должны "отставать" от текущего числа на 6 позиций. Т. е. Если мы обрабатываем число номер 20, то в счётчиках должна быть информация по числам с номерами от 0 до 14 (нумерация с нуля).
А дальше смотрим, кратно ли текущее число 2, 3 и 6. И в зависимости от этого прибавляем счётчики.
function f(arr: array of integer): integer;
var cnt_2, cnt_3, cnt_6, i, res: integer;
begin
cnt_2 := 0; cnt_3 := 0; cnt_6 := 0; res := 0;
for i := 6 to length(arr) - 1 do begin
if arr[i - 6] mod 6 = 0 then inc(cnt_6);
if arr[i - 6] mod 3 = 0 then inc(cnt_3);
if arr[i - 6] mod 2 = 0 then inc(cnt_2);
if arr[i] mod 6 = 0 then
inc(res, i - 5)
else if arr[i] mod 3 = 0 then
inc(res, cnt_2)
else if arr[i] mod 2 = 0 then
inc(res, cnt_3)
else
inc(res, cnt_6);
end;
f := res
end;
1. количество чисел, кратных 6
2. количество чисел, кратных 3
3. количество чисел, кратных 2
Причём эти счётчики должны "отставать" от текущего числа на 6 позиций. Т. е. Если мы обрабатываем число номер 20, то в счётчиках должна быть информация по числам с номерами от 0 до 14 (нумерация с нуля).
А дальше смотрим, кратно ли текущее число 2, 3 и 6. И в зависимости от этого прибавляем счётчики.
function f(arr: array of integer): integer;
var cnt_2, cnt_3, cnt_6, i, res: integer;
begin
cnt_2 := 0; cnt_3 := 0; cnt_6 := 0; res := 0;
for i := 6 to length(arr) - 1 do begin
if arr[i - 6] mod 6 = 0 then inc(cnt_6);
if arr[i - 6] mod 3 = 0 then inc(cnt_3);
if arr[i - 6] mod 2 = 0 then inc(cnt_2);
if arr[i] mod 6 = 0 then
inc(res, i - 5)
else if arr[i] mod 3 = 0 then
inc(res, cnt_2)
else if arr[i] mod 2 = 0 then
inc(res, cnt_3)
else
inc(res, cnt_6);
end;
f := res
end;
Похожие вопросы
- Помогите понять задание. Pascal ABC
- Помогите сделать код Pascal ABC
- Помогите решить задачу по информатике 9 класс. Pascal ABC
- Помогите пж информатика 9 класс програма на языке pascal abc
- Информатика 9 класс Pascal ABC
- Олимпиадная задача по программированию в Pascal (Free, ABC.net) 10 класс! Помогите решить?)
- Помогите написать простые программы и задачи в Pascal ABC. Алгоритмы ветвления. Информатика. Програмирование.
- Помогите с информатикой обычно сам делаю но тут попал в тупик (язык pascal abc)
- Помогите написать программу на уровне 9 класса в Pascal.ABC
- Проблема с программой в Pascal ABC,Встречено ';',а ожидалось ':'. Если менять, то вылетает ещё ошибка с if