Работа с массивом в pascal.abc
Задача следующая:
Заполнить массив 100 случайными целыми числами от 1 до 10
И дальше нужно выполнить ещё 3 условия:
- заполнить так, чтобы всех элементов было поровну
- Найти самую длинную цепочку чётных элементов
- Найти самую длинную возрастающую цепочку чётных элементов идущих последовательно (например, 2 4 6 8 10)
Я написал код, чтобы можно было задать массив, но с условиями проблемка:
const n=100;
var a:array[1..n] of byte;
i:byte;
с:integer;
begin
randomize;
с:=1;
for i:=1 to 100 do
begin
a[i]:=1+random(10);
write(a[i]:3);
if odd(i) then
с:=с*a[i];
end;
writeln;
end.
Ответы (1 шт):
Автор решения: RAlex
→ Ссылка
##
var a := new integer[100];
for var i := 0 to 9 do
a[10 * i:10 * (i + 1)] := 10 * |i + 1|;
a.Shuffle; // перемешиваем случайным образом
a.Println;
// дойдем до первого четного элемента
var i := 0;
while a[i].IsOdd do
i += 1;
// начальные установки (мы нашли один четный элемент)
var (L, LMax, LAsc, LMaxAsc) := (1, 1, 1, 1);
// основная часть
repeat
i += 1;
if a[i].IsEven then begin
L += 1;
if a[i] > a[i - 1] then
LAsc += 1
else
(LAsc, LMaxAsc) := (1, Max(LMaxAsc, LAsc))
end
else
(L, LMax, LAsc, LMaxAsc) := (0, Max(L, LMax), 0, Max(LAsc, LMaxAsc))
until i = a.High;
(LMax, LMaxAsc) := (Max(L, LMax), Max(LAsc, LMaxAsc));
Write(NewLine, LMax, ' ', LMaxAsc)
