Текст задача
По каналу связи передается последовательность положительных целых чисел, все числа не превышают 1000, их количество заранее неизвестно. Каждое число передается отдельно. Признаком конца передаваемой последовательности является число 0. После числа 0 передается контрольное значение – наибольшее число R, удовлетворяющее следующим условиям:
1) R – произведение двух различных переданных элементов последовательности («различные» означает, что не рассматриваются квадраты переданных чисел, произведения различных, но равных по величине элементов допускаются);
2) R делится на 6
Напишите эффективную программу, которая получает последовательность чисел и следующие за ней признак конца и контрольное значение, а также проверяет правильность контрольного значения. Программа должна напечатать отчет по следующей форме:
Получено .. чисел
Полученное контрольное значение: ….
Вычисленное контрольное значение:…
Контроль пройден (или – контроль не пройден).
Размер памяти, которую использует Ваша программа, не должен зависеть от длины переданной последовательности чисел. Перед текстом программы кратко опишите используемый вами алгоритм решения задачи.
Пример входных данных:
60
17
3
7
9
60
0
3600
Пример выходных данных для приведенного выше примера входных данных:
Получено 6 чисел
Полученное контрольное значение: 3600
Вычисленное контрольное значение: 3600
Контроль пройден.
Метод решения
В N полученных числах ищем:
- максимальное значение,
- максимальные значение кратное шести (если есть)
- максимальные значение кратное трем (если есть)
- максимальные значение кратное двум (если есть)
из этих полученных чисел формируем максимальное контрольное значение, сравниваем с полученным.
Код программы
var x, count, C, C0, max, max2, max3, max6: integer;
begin
count:=0; max:=0; max2:=0; max3:=0; max6:=0;
readln(x);
while x <> 0 do begin
count:= count + 1;
if (x mod 6 = 0) and (x > max6) then begin
if max6 > max then max:= max6;
max6:= x
end
else if x > max then max:= x;
if (x mod 2 = 0) and (x > max2) then max2:= x
else
if (x mod 3 = 0) and (x > max3) then max3:= x;
readln(x);
end;
readln(C0);
if max6*max > max2*max3 then
C:= max6*max
else C:= max2*max3;
writeln('Ввели чисел: ', count);
writeln('Полученное контрольное значение: ', C0);
writeln('Вычисленное контрольное значение: ', C);
if C = C0 then
writeln('Контроль пройден..')
else writeln('Контроль не пройден.');
end.
Просмотры: 9531 |
Статью добавил:
slava191 |
Категория:
информатика