Pascal одномерный массив. Упорядочить каждые вторые ненулевые элементы последней четверти...

0 голосов

Pascal одномерный массив. Упорядочить каждые вторые ненулевые элементы последней четверти одномерного массива по убыванию обратных значений


спросил от (21 баллов) в категории Информатика
оставил комментарий от БОГ (150k баллов)

Не знаю...

оставил комментарий от Одаренный (4.2k баллов)

хотя опять же округлять или откидать дробную часть)

оставил комментарий от БОГ (150k баллов)

Выше я написал две возможные по логике формулы.

оставил комментарий от БОГ (150k баллов)

Для 19 получается 4+4+4+7 или 5+5+5+4, но для 17 получится 4+4+4+5 или 5+5+5+2. В любом варианте последняя длина - не четверть

оставил комментарий от Одаренный (4.2k баллов)

Соотвественно , да

оставил комментарий от Одаренный (4.2k баллов)

Ещё и что-то профили сломались, кликнув на некоторых пользователей кидает 404 ошибку)

оставил комментарий от БОГ (150k баллов)

Ну т.е. если длина не кратна 4, это порождает головную боль.

оставил комментарий от БОГ (150k баллов)

Ну...мой профиль тоже обычно дает ошибку. Это криворукость здешних сайтописателей. Они некоторые символы кириллице в хэше некорректно заменили. Такова, к примеру, буква Э в моем нике.

оставил комментарий от Одаренный (4.2k баллов)

Понятно, а ещё постоянно почему-то с мобильной версии на полную кидает при переходе, когда я с телефона

оставил комментарий от БОГ (150k баллов)

Не знаю. Мобильная версия (на мой взгляд) - это зло и я ее даже не видел. Знаю по отзывам, что глючная.

1 Ответ
0 голосов
ответил от БОГ (150k баллов)
 
Лучший ответ
PascalABC.NET 3.4.0, сборка 1671 от 31.05.2018
Внимание! Если программа не работает, обновите версию!

begin
  var n:=36;
  var a:=ArrRandom(n,-50,50); a.Println;
  var n4:=n div 4;
  var (s1,s2):=a.Select((v,i)->(v,i)).TakeLast(n4).Where(t->t[0]<>0)
      .Slice(1,2).OrderByDescending(t->1/t[0]).UnZipTuple;
  foreach var t in s1.ZipTuple(s2.Sorted) do a[t[1]]:=t[0];
  a.Println
end.

image
...