Другие языки программирования и технологии

Дан массив N<100 целых чисел. Упорядочить элементы по убыванию и вывести те элементы, которые остались на своих места

(Pascal)
arr = [];
arr2 = [];
for (var i = 0; i < 10; i++) {
rand = Math.floor(Math.random()*100);
arr.push(rand);
}
console.log('a ', arr);
a = arr.slice();
n = arr.sort(function (a,b) {
return a - b;
})
n = n.reverse();
for (var i = 0; i < a.length; i++) {
if (a[i] == n[i]) {
arr2.push(arr[i])
}
};
console.log('n ', n)
console.log('3', arr2)
>>>
a
Array(10) [ 41, 60, 44, 13, 0, 4, 34, 44, 1, 66 ]
n
Array(10) [ 66, 60, 44, 44, 41, 34, 13, 4, 1, 0 ]
3
Array(3) [ 60, 44, 1 ]
ТК
Туристическая Компания
91 884
Лучший ответ
Артём Ходос это что ещё за такое?
100 элементов - со скоростью сортировки заморачиваться не требуется. Отслеживать перестановку элементов проще всего при сортировке методом простого выбора. Для 100 элементов учёт перемещений проще всего вести с помощью множества.

type index = 0..99;
var
swp: set of index;
arr: array [index] of integer;
n, i, j, k, t: integer;
begin
swp := [];
read(n);
for i := 0 to n - 1 do read(arr[i]);
for i := 0 to n - 2 do begin
k := i;
for j := i + 1 to n - 1 do if arr[j] > arr[k] then k := j;
if k <> i then begin
swp := swp + [i, k];
t := arr[i]; arr[i] := arr[k]; arr[k] := t
end
end;
for i := 0 to n - 1 do if not (i in swp) then write(arr[i], ' ')
end.
Арман Мукашев
Арман Мукашев
93 013
Артём Ходос а можно было просто выводить те, которые остались на месте
Артём Ходос если (условие) то переставить
иначе вывести
решил
1. Создаёте второй массив, который представляет из себя первый, но отсортированный по убыванию.
2. Пробегаете по второму (или первому) массиву и смотрите, стоит ли на месте i в первом массиве то же, что и на месте i на втором

Похожие вопросы