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

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

Упорядочить прямую диагональ в порядке убывания. Объясните что за прямая диагональ и намениктехотябы как эта задача решается в С++
Maksim Fedorenko
Maksim Fedorenko
100
#include <iostream>
#include <iomanip>
#include <ctime>
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;
}
Asilbek Babaniyazov
Asilbek Babaniyazov
61 763
Лучший ответ
Мне моя логика подсказывает, что надо просмотреть диагональ в цикле и найти максимум. ,
Затем переставить столбец с максимумом в первый столбец,
Остальные столбцы левее переставляемого увеличивают свой индекс на 1.
а затем строку с максимумом переставить в первую строку.
Остальные строки выше переставляемой увеличивают свой индекс на 1.

После чего просмотреть диагональ и повторить алгоритм начиная не с (0,0), а с (1,1)
столбец и строку поставить на следующее место (не трогая предыдущего максимума)

и так до (n-2,n-2)
Шакир Артыков
Шакир Артыков
70 042
наверное имеется ввиду главная диагональ, эт вот эта

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