Дан массив a длины 3 из целых чисел. Определим операцию изменения массива: выбирается два различных индекса i
и
j
(
1
≤
i
,
j
≤
3
,
i
≠
j
), после чего
a
[
i
]
становится равным
a
[
i
]
−
a[
]
.
Пример операции: дан массив
[
1
,
−
3
,
2
]
, выбрали
i
=
2
,
j
=
1
, получили массив
[
1
,
−
3
−
1
,
2
]
=
[
1
,
−
4
,
2
]
.
Определим для массива
a
медиану
m
как значение, расположенное на позиции
2
при сортировке элементов массива
a
.
К примеру, медианой массива
a
=
[
1
,
−
3
,
2
]
является
m
=
1
, так как в сортированном массиве
[
−
3
,
1
,
2
]
именно
1
стоит на позиции
2
.
Назовём медианным индексом такой индекс
i
, что
a
i
=
m
.Обратите внимание, что медианный индекс необязательно единственный: в массиве a = [3,0,3] медиана m = 3, а медианными индексами являются i1 = 1 (a1 = m) и i2 = 3 (a3 = m).Для каждого индекса i массива a выясните, может ли он стать медианным, если можно сделать не более одной операции изменения массива (можно не делать операций вовсе).Формат ввода. В единственной строке даны 3 целых числа ai (−109≤ai≤109), разделенные пробелами. Формат выводаДля каждого индекса i (1≤i≤3) выведите в отдельной строке ответ: YES, если после не более,чем одной операции изменения массива i может стать медианным индексом; NO — иначе.
Примечания:В первом тесте a = [2,6,5].Если сделать операцию изменения i=2,j=3, то получится массив [2,1,5], медиана будет равна 2, а значит i = 1 будет являться медианным индексом.Если сделать операцию изменения i=2,j=1, то получится массив [2,4,5], медиана будет равна 4, а значит i = 2 будет являться медианным индексом. Если не делать никаких операций изменения, то медианой массива
[2,6,5] будет 5, а значит i = 3 будет являться медианным индексом. Аналогично i=3 будет медианным индексом после операции изменения i=3,j=1.Во втором тесте единственной операцией изменения, делающей индекс i=2 медианным, является операция i=2,j=2, но такая операция не является корректной, так как индексы i должны быть различны.
var
c, a: array[1..20] of integer;
i: integer;
begin
write('Первый массив ');
for i := 1 to 20 do begin
c[i] := i * (-5);
write(c[i], ' ');
end;
writeln;
write('Преобразованный массив ');
for i := 1 to 20 do begin
a[i] := c[20 - i + 1];
write(a[i], ' ');
end;
end.
ИЛИ Программа не использующая два массива, а просто переворачивающая первый
var
c: array[1..20] of integer;
i: integer;
begin write('Первый массив ');
for i := 1 to 20 do begin
c[i] := i * (-5);
write(c[i], ' ');
end;
writeln;
write('Преобразованный массив ');
for i := 20 downto 1 do write(c[i], ' ');
end.
Обе программы работают!
в простейшем случае, трассировка - вывод значений переменных на экран (например, в окно консоли) , либо расчёт их на бумажке для каждого шага.
в более продвинутом варианте используются точки останова, окно наблюдения, выполнение по шагам и, если есть, контекстный интерпретатор выражений.
есть также специальная "трассирующая консоль" - интерфейс вывода информации из программы в отладчик, если таковой присутствует.
почти любой современный отладчик показывает состояние програмm при её останове, что делает трассировку процессом легко доступным