Присоединиться

Информатика·Задания Д27 C4. Программирование·11 класс

Укажите использованный язык программирования и его версию.

Условие

На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 4 (разница в индексах элементов пары должна быть 4 или более, порядок элементов в паре неважен). Необходимо определить количество таких пар, для которых произведение элементов делится на 29.Описание входных и выходных данных В первой строке входных данных задаётся количество чисел N (4 ≤ N ≤ 1000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000.В качестве результата программа должна вывести одно число: количество пар элементов, находящихся в последовательности на расстоянии не меньше чем 4, в которых произведение элементов кратно 29.Пример входных данных:7582 3 5 4 1 29Пример выходных данных для приведённого выше примера входных данных: 5Пояснение. Из 7 заданных элементов с учётом допустимых расстояний между ними можно составить 6 произведений: 58 · 4, 58 · 1, 58 · 29, 2 · 1, 2 · 29, 3 · 29. Из них на 29 делятся 5 произведений.Требуется написать эффективную по времени и по памяти программу для решения описанной задачи. Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 Кбайт и не увеличивается с ростом N. Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и по памяти, - 4 балла. Максимальная оценка за правильную программу, эффективную только по времени - 3 балла. Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, - 2 балла. Вы можете сдать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если Вы сдадите две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бо́льшая из двух оценок. Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию. Критерии оценивания выполнения задания | Баллы | Программа правильно работает для любых входных данных произвольного размера. Используемая память не зависит от количества прочитанных чисел, а время работы пропорционально этому количеству.Допускается наличие в тексте программы до трёх синтаксических ошибок одного из следующих видов:1) пропущен или неверно указан знак пунктуации;2) неверно написано или пропущено зарезервированное слово языка программирования;3) не описана или неверно описана переменная;4) применяется операция, недопустимая для соответствующего типа данных.Если одна и та же ошибка встречается несколько раз, это считается за одну ошибку | 4 | Не выполнены условия, позволяющие поставить 4 балла.Программа в целом работает правильно для любых входных данных произвольного размера. Время работы пропорционально количеству введённых чисел, правильно указано, какие величины должны вычисляться по ходу чтения элементов последовательности чисел.Используемая память, возможно, зависит от количества прочитанных чисел (например, входные данные запоминаются в массиве, контейнере STL в C++ или другой аналогичной структуре данных).Количество синтаксических ошибок («описок»), указанных в критериях на 4 балла, - не более пяти.Допускается наличие не более одной ошибки следующих видов:1) ошибка при инициализации или отсутствие инициализации счётчиков;2) использование нахождения остатка вместо деления (mod вместо div в Паскале) или наоборот;3) допущен выход за границу массива;4) не учтены или неверно учтены пары, в которых каждый элемент делится на 7;5) неверно составлены или учтены не все комбинации остатков;6) неверно подсчитано количество пар для всех или некоторых комбинаций остатков (например, не выполняется деление на 2) | 3 | Не выполнены условия, позволяющие поставить 3 или 4 балла, при этом программа работает верно, эффективно или нет. В частности, в 2 балла оцениваются переборные решения, в которых все исходные данные сохраняются в массиве, рассматриваются все возможные пары, из которых выбираются подходящие.Допускается наличие до трёх содержательных ошибок, описанных в критериях на 3 балла, и до девяти синтаксических ошибок, описанных в критериях на 4 балла | 2 | Не выполнены условия, позволяющие поставить 2, 3 или 4 балла.При этом программа описывает в целом правильный алгоритм (эффективный или нет), но количество допущенных ошибок не укладывается в описанные выше ограничения | 1 | Не выполнены критерии, позволяющие поставить 1, 2, 3 или 4 балла | 0 | Максимальный балл | 4 |

Формат задания

Развёрнутый ответ: короткого ответа здесь нет — оценивается само рассуждение. Ниже разбор по шагам.

Решение по шагам

  1. Как рассуждать

    Решение. Произведение двух чисел делится на 29, если хотя бы один из сомножителей делится на 29.При вводе чисел можно подсчитывать количество чисел, кратных 29, не считая четырёх последних. Обозначим их n29.Примечание для проверяющего. Сами числа, кроме четырёх последних, при этом можно не хранить.Очередное считанное число будем рассматривать как возможный правый элемент искомой пары. Если очередное считанное число делится на 29, то к ответу следует прибавить количество чисел до него, не считая четырёх последних (включая считанное). Если очередное считанное число на 29 не делится, то к ответу следует прибавить n29.Чтобы построить программу, эффективную по памяти, заметим, что, поскольку при обработке очередного элемента входных данных используются значения, находящиеся на четыре элемента ранее, достаточно хранить только четыре последних элемента или информацию о них. Ниже приведена реализующая описанный алгоритм программа на языке Паскаль (использована версия PascalABC). Пример

Осталось ещё 6 шагов — откроются после входа:

  • Шаг 2
  • Шаг 3
  • Шаг 4
  • Шаг 5
  • Шаг 6
  • Шаг 7
Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Задания Д27 C4. Программирование»