На трёх путях сортировочной станции стоят вагоны с абрикосами (А), бананами (Б) и вишней (В) так, как это показано на рисунке.
Машинист тепловоза (Т) может за один раз прицепить к тепловозу один или несколько вагонов с какого-нибудь пути, передвинуть их на правый путь, после чего передвинуть их на любой левый путь. Например, если тепловоз заберет 2 вагона с пути номер 3 на путь номер 1, то после такого действия распределение вагонов по путям будет таким.
А В Б А В
Б В А
Б
Соответствующую команду перемещения будем записывать так.
2 3 1
Что означает, что необходимо передвинуть 2 вагона с пути номер 3 на путь номер 1. Первое число обозначает количество перемещаемых вагонов, второе число – номер пути, с которого нужно забрать вагоны, третье число – номер пути, на который нужно передвинуть вагоны.
Разработайте алгоритм действий машиниста, необходимых для того, чтобы сформировать на каждом из путей составы с одинаковыми фруктами (не важно, на каком именно пути). Алгоритм оформите в виде последовательности команд, записанных в отдельных строках. Каждая команда имеет указанный выше вид: сначала записано число передвигаемых вагонов, потом номер пути с которого передвигаются вагоны, затем номер пути, на который передвигаются вагоны.
Например, следующая запись:
2 3 1
1 2 3
означает «передвинуть 2 вагона с пути 3 на путь 1, затем передвинуть 1 вагон с пути 2 на путь 3».
Чем меньше команд будет в вашем алгоритме, тем большее количество вы получите.
n = 10;//предельное количество точек
var
a: array[1..2 * n] of real;
x, y, l,lmax, lmin: real;
i, j, k: integer;
begin
writeln('Введите количество точек (не более ', n, ')');
readln(k);
writeln('Вводите координаты точек (x,y) попарно');
lmax := 0;
lmin := 1e10;
for i := 1 to k do
begin
j := 2 * i - 1;
read(a[j], a[j + 1]);
l := sqr(a[j]) + sqr(a[j + 1]); //квадратами расстояния до точки
if lmax<l then lmax:=l;
if lmin>l then lmin:=l
end;
writeln;
writeln('Все точки находятся внутри кольца с радиусами ',sqrt(lmin),', ',sqrt(lmax))
end.
Тестовое решение:
Введите количество точек (не более 10)
5
Вводите координаты точек (x,y) попарно
3 6 2 5 -4 -3 5 7 3 3
Все точки находятся внутри кольца с радиусами 4.24264068711928, 8.60232526704263
var
i:integer;
begin
for i:=1 to 10000 do // по условиям задачи i:=1 to 999
if (i mod 43 = 41) and (i mod 47 = 43) then
writeln(i);
end.
Результаты вывода:
1030
3051
5072
7093
9114
Так что минимальное число, удовлетворяющее требованиям, 1030, но оно не трехзначное
Вот более продвинутый алгоритм, делающий то же самое:
var
n43:integer;
begin
n43:=127;
repeat
n43:=n43+43;
until (n43 mod 43 = 41) and (n43 mod 47 = 43); //добавить and (n43<1000)
writeln(n43)
end.
Результат вывода:
1030