Для начала отметим, что переправа не состоится только в одном случае : если число разбойников будет превышать число купцов на берегу.
Итак, пусть берег, на котором стоят три купца и три разбойника , будет называться первым, а берег на который нужно перебраться - вторым. Попробуем вместить в двухместную лодку двух купцов, тогда на первом берегу останется 1 купец и 3 забойника, по условию это недопустимо, идем дальше: в лодку садятся один купец и один разбойник, на берегу остаются два купца и два разбойника, этот расклад нам подходит с него и начнем.
1 рейс- в лодку садятся 1 купец и 1 разбойник и переправляются на второй берег, на нем оставим купца(1 разбойник всегда будет находиться в лодке и переправлять остальных) На первом берегу 2 купца, 2 разбойника(2к;2р)
2 рейс - возвращение к первому берегу
3 рейс- в лодку садится 1 разбойник, т. к. если сядет 1 купец то разбойников на первом берегу будет больше, переправа на второй берег (2к;1р)
4 рейс - возвращение
5 рейс - в лодку садится 1 купец, (1к;1р), переправа
6 рейс - возвращение
7 рейс -в лодку садится 1 разбойник (1к;0 р), переправа
8 рейс - возвращение
9 рейс - в лодку садится 1 купец (0к;0р), переправа 1 купца и 1 разбойника
ответ:Переправа состоялась за 9 рейсов, пострадавших не обнаружено.
как то так)
min,max,i: byte;
kontrol: boolean;
rez: real;
a: array[1..9] of byte;
begin
min:=6;
max:=1;
rez:=0;
kontrol:=true;
for i:=1 to 9 do begin
write ('введите ',i,'-ю оценку: ');
readln (a[i]);
if (a[i]<1) or (a[i]>6) then kontrol:=false;
if a[i]>max then max:=a[i];
if a[i]<min then min:=a[i];
rez:=rez+a[i]
end;
rez:=(rez-min-max)/7;
if kontrol=true
then writeln ('Зачетная оценка: ',rez:6:3)
else writeln ('Введены некорректные данные')
end.
Пример:
введите 1-ю оценку: 2
введите 2-ю оценку: 3
введите 3-ю оценку: 4
введите 4-ю оценку: 4
введите 5-ю оценку: 4
введите 6-ю оценку: 5
введите 7-ю оценку: 5
введите 8-ю оценку: 5
введите 9-ю оценку: 6
Зачетная оценка: 4.286