Количество чисел известно, но может быть очень велико. Затем передаётся
Условие
По каналу связи передаётся последовательность положительных целых чисел, все числа не превышают 1000. Количество чисел известно, но может быть очень велико. Затем передаётся контрольное значение последовательности — наибольшее число R, удовлетворяющее следующим условиям:
-
R — произведение двух различных переданных элементов последовательности («различные» означает, что не рассматриваются квадраты переданных чисел, произведения различных элементов последовательности, равных по величине, допускаются);
-
R делится на 6. Если такого числа R нет, то контрольное значение полагается равным 0. В результате помех при передаче как сами числа, так и контрольное значение могут быть искажены. Напишите эффективную, в том числе по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет проверять правильность контрольного значения. Программа должна напечатать отчёт по следующей форме: Вычисленное контрольное значение: ... Контроль пройден (или — Контроль не пройден) Перед текстом программы кратко опишите используемый Вами алгоритм решения. На вход программе в первой строке подаётся количество чисел N. В каждой из последующих N строк записано одно натуральное число, не превышающее 1000. В последней строке записано контрольное значение. Пример входных данных: 670 17 699997706930 Пример выходных данных для приведённого выше примера входных данных: Вычисленное контрольное значение: 6930 Контроль пройден Указания по оцениванию4 балла ставится за эффективную и правильно работающую программу, которая, возможно, содержит до трёх синтаксических ошибок.3 балла ставится в случае, когда задача фактически решена, но программа содержит четыре-пять синтаксических ошибок, или если допущена одна содержательная ошибка, или если все входные данные сохраняются в массиве или иной структуре данных (программа неэффективна по памяти, но эффективна по времени работы).2 балла ставится, если программа неэффективна по времени работы (перебираются все возможные пары элементов), или в программе две содержательные ошибки, либо шесть-семь синтаксических ошибок.1 балл ставится, если программа написана неверно, но из описания алгоритма и обшей структуры программы видно, что экзаменуемый в целом правильно представляет путь решения задачи. Далее уточняются перечисленные выше критерии.
Формат задания
Решение по шагам
Как рассуждать
Решение. Произведение двух чисел делится на 6, если:- один из сомножителей делится на 6 (второй может быть любым) либо- ни один из сомножителей не делится на 6, причём один из сомножителей делится на 2, а другой — на 3.Поэтому программа, вычисляющая кодовое число, может работать так.
Программа читает все входные данные один раз, не запоминая все данные в массиве. Программа для прочитанного фрагмента входной последовательности хранит значения четырех величин:М2 - самое большое чётное число, не кратное 3;М3 - самое большое число, кратное 3, но не кратное 2;М6 — самое большое число, кратное 6;МАХ - самое большое число среди всех элементов последовательности, отличное от M6 (если число М6 встретилось более одного раза и оно же является максимальным, то МАХ = M6).После того как все данные прочитаны, искомое кодовое слово вычисляется как максимум из произведений M6МАХ и М2М3.Ниже приведён пример программы на языке Паскаль, которая реализует описанный алгоритм.
Кроме того, приведён пример программы на языке Бейсик, которая правильно решает задачу, но использует алгоритм, немного отличающийся от описанного выше. Возможны и другие правильные алгоритмы. Допускаются решения, записанные на других языках программирования. Пример правильной и эффективной программы на языке Паскаль: var М2, М3, М6, R, MAX, dat, res, i, N: longint;begin M2 := 0; M3 := 0; M6 := 0; MAX := 0;readln(N);for i := 1 to N do beginreadln(dat);if ((dat mod
Осталось ещё 3 шага
>0) and (dat > M2) then M2 := dat;if ((dat mod…
and (dat > M3) then M3 := dat;if (dat mod 6 =…
and (dat > M6) then beginif M6 > MAX then MAX…
Бесплатно · займёт минуту