Задача. Дан массив целых чисел из N элементов. Верно ли, что сумма чисел, оканчивающихся на 7, меньше утроенного максимального нечетного значения?
Пример:
Массив mas = [29, -17, 7, 24, 27, 54]
Сумма чисел, оканчивающихся на 7: -17+7+27 = 17
Максимальное нечетное значение: 29
17 < 3*29, то есть 17 < 87, да, верно.
Как будем решать задачу
Опишем массив в блоке Var
var mas:array of integer;
Выделим N ячеек для хранения данных в массиве:
setLength(mas,N);
Введем данные с клавиатуры и сохраним в массиве:
for k:=0 to mas.Length-1 do
begin
readln(mas[k]);
end;
Нумерация ячеек при таком объявлении ведется с 0 и, номер последней ячейки можно вычислить так: mas.length - 1, где mas.length это длина массива.
Найдем элементы, оканчивающиеся на 7: mas.Where(k->abs(k) mod 10 = 7)
Метод Where (где) находит элементы массива, удовлетворяющие условию.
В нашем случае условие такое: abs(k) mod 10 = 7
(модуль числа применяем для того, чтобы обработать в том числе и отрицательные числа).
Результатом работы метода Where является набор тех элементов, которые отвечают условию. Для решения нашей задачи нужно найденные элементы суммировать. Сделаем это методом Sum:
mas.Where(k->abs(k) mod 10 = 7).Sum
Найденное значение сохраним в переменной s.
s:=mas.Where(k->abs(k) mod 10 = 7).Sum;
Таким же образом будем находить нечетные значения в массиве, а затем применим метод Max:
mas.Where(k->k mod 2 <> 0).Max
Найденное значение сохраним в переменной m.
m:=mas.Where(k->k mod 2 <> 0).Max;
Выполним проверку: если s<m*3, то верно, иначе неверно.
Программа решения задачи на языке Паскаль
var mas:array of integer;
s,m,N,k:integer;
begin
readln(N);
setLength(mas,N);
for k:=0 to mas.Length-1 do
begin
readln(mas[k]);
end;
s:=mas.Where(k->abs(k) mod 10=7).Sum;
m:=mas.Where(k->k mod 2<>0).Max;
if s<m*3 then println('Верно') else println('Неверно');
end.
Результат запуска программы
Объявление и методы динамических массивов (читать)
Комментариев нет:
Отправить комментарий