Вы дизайнер некоторой авиастроительной компании, фирменными цветами которой являются белый, синий и красный. при оформлении павильона на авиафестивале вы развесили в линию 22 ленточки фирменных цветов таким образом, что никакие две соседние не по цвету. сколькими вы могли это сделать?
var a:array[1..n+1] of integer;
k,i:integer; b:boolean;
begin
Randomize;
for i:=1 to n do
begin
a[i]:=random(21)-10;
write(a[i]:4);
end;
writeln;
write('Введите число: '); readln(k);
b:=false;
for i:=1 to n do
if a[i]=k then b:=true;
if not b then
begin
for i:=n+1 downto n div 2 + 1 do a[i]:=a[i-1];
a[n div 2]:=k;
for i:=1 to n+1 do write(a[i]:4);
writeln;
end
else writeln('Массив не изменился');
end.
Пример:
6 10 -5 -3 -9 -8 -3 3 -9 7
Введите число: 4
6 10 -5 -3 4 -9 -8 -3 3 -9 7
Будем считать, что индекс массива совпадает с порядковым номером элемента, т.е. индексация в массиве идет от единицы, тогда выводу подлежат второй, четвертый, шестой и т.д. элементы.
1. Современный "короткий" вариант
// PascalABC.NET 3.1, сборка 1190 от 05.03.2016
begin
var a:=ArrRandom(17,-50,50); a.Println;
a.Where((x,i)->Odd(i)).Println
end.
Тестовое решение:
-6 35 -48 -50 -16 -36 20 16 -10 32 -4 34 46 -45 14 13 -36
35 -50 -36 16 32 34 -45 13
2. Традиционный ("школьный" вариант) - так до сих пор учат в школах
// PascalABC.NET 3.1, сборка 1190 от 05.03.2016
const
n=17;
var
a:array[1..n] of integer;
i:integer;
begin
Randomize;
for i:=1 to n do begin
a[i]:=Random(101)-50;
Write(a[i],' ')
end;
Writeln;
i:=2;
while i<=n do begin
Write(a[i],' ');
i:=i+2
end;
Writeln
end.
Тестовое решение:
27 -29 10 -35 -48 -45 0 4 -50 -13 17 -41 12 26 38 26 23
-29 -35 -45 4 -13 -41 26 26