Дан двумерный массив целых чисел. Упорядочить прямую диагональ в порядке убывания.
Упорядочить прямую диагональ в порядке убывания. Объясните что за прямая диагональ и намениктехотябы как эта задача решается в С++
Упорядочить прямую диагональ в порядке убывания. Объясните что за прямая диагональ и намениктехотябы как эта задача решается в С++
#include
#include
#include
using namespace std;
int main() {
const size_t size = 10;
unsigned a[size][size];
srand(unsigned(time(NULL)));
for (size_t r = 0; r < size; r++)
for (size_t c = 0; c < size; c++)
a[r][c] = rand() % 100;
streamsize w = 4;
for (size_t r = 0; r < size; r++, cout << endl << endl)
for (size_t c = 0; c < size; c++)
cout << setw(w) << a[r][c];
unsigned temp;
size_t m;
for (int n = 1; n < size; n++) {
m = n;
while (m > 0 && a[m - 1][m - 1] > a[m][m]) {
temp = a[m][m];
a[m][m] = a[m - 1][m - 1];
a[m - 1][m - 1] = temp;
m--;
}
}
cout << endl;
for (size_t r = 0; r < size; r++, cout << endl << endl)
for (size_t c = 0; c < size; c++)
cout << setw(w) << a[r][c];
cin.get();
return 0;
}
наверное имеется ввиду главная диагональ, эт вот эта
Мне моя логика подсказывает, что надо просмотреть диагональ в цикле и найти максимум. ,
Затем переставить столбец с максимумом в первый столбец,
Остальные столбцы левее переставляемого увеличивают свой индекс на 1.
а затем строку с максимумом переставить в первую строку.
Остальные строки выше переставляемой увеличивают свой индекс на 1.
После чего просмотреть диагональ и повторить алгоритм начиная не с (0,0), а с (1,1)
столбец и строку поставить на следующее место (не трогая предыдущего максимума)
и так до (n-2,n-2)