Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2022, 23:03   #1
Zakhar_Titar
 
Регистрация: 26.01.2022
Сообщений: 4
По умолчанию Как отсортировать массив по схеме

Снимок экрана 2022-07-08 190427.png
Задана квадратная матрица n*n. Необходимо рандомно заполнить матрицу и отсортировать по указанной схеме.Как я понимаю, нужно перевести матрицу в одномерный массив , выполнить сортировку по убыванию и так же обратно перевести в двумерный массив, но я не представляю как это можно реализовать
Можно реализовать как на питоне, так и на с++
Zakhar_Titar вне форума Ответить с цитированием
Старый 21.07.2022, 00:41   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Просто определите функцию, которая будет перечислять координаты в нужном порядке, и вам не придется ничего копировать в массив и обратно. Получая координаты через эту функцию вы сможете рассматривать эту матрицу как одномерный массив. В такой функции будет определено два направления и несколько условий его изменения.
Как первый вариант реализации можете рассмотреть такой. Зафиксируйте размерность матрицы и определите линейный массив длинной w * h, в котором перечислите координаты в нужном порядке. Потом используйте этот массив в качестве индексов матрицы и отсортируйте ее элементы по возрастанию.
Код:
int idx[16][2] = {{0, 3}, {1, 3}, {0, 2}, {0, 1}, {1, 2}, {2, 3}, {3, 3}, {2, 2}, {1, 1}, {0, 0}, {0, 1}, {1, 2}, {2, 3}, {1, 3}, {0, 3}};
int A[4][4]; // Заполните это сами
// Далее обычная сортировка выбором
for (int  m, i = 0; i < 15; i++) {
  m = i;
  for (int j = i + 1; j < 16; j++)
    if (A[idx[j][0]][idx[j][1]] < A[idx[m][0]][idx[m][1]])
      m = j;
  if (m != i) {
    int j = A[idx[m][0]][idx[m][1]];
    A[idx[m][0]][idx[m][1]] = A[idx[i][0]][idx[i][1]];
    A[idx[i][0]][idx[i][1]] = j;
  }
}

Последний раз редактировалось macomics; 21.07.2022 в 00:44.
macomics вне форума Ответить с цитированием
Старый 21.07.2022, 01:53   #3
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 957
По умолчанию

поиск: змейкой находит темы про массив

и если сначала отсортировать
далее цепочка заполняет массив

змейкой
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую
сфинкс вне форума Ответить с цитированием
Старый 21.07.2022, 09:03   #4
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 493
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
будет определено два направления
вроде 4 направления
Valick вне форума Ответить с цитированием
Старый 21.07.2022, 09:30   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Valick Посмотреть сообщение
вроде 4 направления
два. остальные будут получаться при столкновении с пределами
эти же условия и будут теми, при которых должно изменяться направление.
первое
Код:
if (direction == up) {
  x -= 1;
  y -= 1;
  if (x < 0 && y < 0) { // верхний левый угол
    x = 1;
    y = 0;
    direction = down;
  } else if (x < 0) { // слева вверх
    x = 0;
    direction = down;
  } else if (y < 0) { // сверху вправо
    y = 0;
    x += 2;
    direction = down;
  }
}
второе
Код:
if (direction == down) {
  x += 1;
  y += 1;
  if (x >= width && y >= height) { // нижний правый угол
    x = width - 1;
    y = height - 2;
    direction = up;
  } else if (x >= width) { // справа вверх
    x = width - 1;
    y -= 2;
    direction = up;
  } else if (y >= height) { // снизу вправо
    y = height - 1;
    direction = up;
  }
}

Последний раз редактировалось macomics; 21.07.2022 в 10:00.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Массив Х содержит 40 действительных чисел. Переписать в массив Y положительные элементы массива Х с четными номерами и отсортировать его по возрастанию. Kogard Помощь студентам 6 16.11.2018 13:13
Массив Х содержит 40 действительных чисел. Переписать в массив Y положительные элементы массива Х с четными номерами и отсортировать его по возрастанию. Kiruxa_UA Помощь студентам 2 22.10.2017 17:24
C# Заполнить массив по приложенной схеме Bren1Dy Помощь студентам 1 14.04.2016 15:53
Заполнить массив из 20 элементов случайным образом от -5 до +5. Отсортировать массив по возрастанию. Olechkina Помощь студентам 1 08.12.2013 18:32
Дан массив из N целых чисел. Получить из него массив чисел по модулю меньших 10 и отсортировать его(язык си++) mitja-zakelidis Помощь студентам 2 15.03.2012 03:10