var a:array of integer;
i,n,z,k:integer;
begin
write('Введите количество элементов массива: ');
read (n);
a:=new integer[n];
for i:=0 to n-1 do a[i]:=random(89)+1;
z:=a[0];
k:=0;
for i:=0 to n-1 do if a[i] mod 2 <> 0 then
begin
z:=a[i];
k:=i;
end;
writeln ('Массив: ',a);
write ('Последний нечётный элемент массива ',z,' и его номер ',k)
end.
Не попавшую на рисунок вершину обозначим К.
С пунктом В связано наибольшее количество точек - ему соответствует П6. Пункт Е - единственный, который не связан с В - на его роль претендует только П2. Только пункт К имеет связь ровно с тремя вершинами - по таблице ему подходит П4.
Имеем:
В - П6
Е - П2
К - П4
Зная, что вершина Д связана с Е, определим по таблице, что ей подходит П7 (П4 уже занята пунктом К). Точке Г соответствует П3.
Осталось посчитать расстояния всевозможных маршрутов от В до Е и выбрать кратчайший.
В-Д = П6-П7 = 20
Д-Е = П7-П2 = 15
В-Д-Е = 20+15 = 35
В-К = П6-П4 = 25
К-Е = П4-П2 = 5
В-К-Е = 25+5 = 30
В-Г = П6-П3 = 10
Г-К = П3-П4 = 10
К-Е = П4-П2 = 5
В-Г-К-Е = 10+10+5 = 25
25 < 30 < 35
Таким образом, длина кратчайшего маршрута - 25.
Вообще, при решении подобных задач старайтесь искать какие-нибудь зацепки - например, вершины с таким количеством соседей, которого нет у других вершин (вроде вершин В и К в этой задаче). Где-то можно использовать метод исключения и т.п.
begin
var a := ArrRandom(ReadInteger('n='), -50, 50);
a.Println;
var i := a.IndexesOf(t -> t.IsOdd).Last;
Writeln('a[', i + 1, ']=', a[i])
end.
n= 13-6 -22 32 23 23 12 -49 4 -47 40 -28 -50 -36a[9]=-47