Другие языки программирования и технологии
Дан двумерный массив целых чисел. Упорядочить прямую диагональ в порядке убывания.
Упорядочить прямую диагональ в порядке убывания. Объясните что за прямая диагональ и намениктехотябы как эта задача решается в С++
#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;
}
#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;
}
Мне моя логика подсказывает, что надо просмотреть диагональ в цикле и найти максимум. ,
Затем переставить столбец с максимумом в первый столбец,
Остальные столбцы левее переставляемого увеличивают свой индекс на 1.
а затем строку с максимумом переставить в первую строку.
Остальные строки выше переставляемой увеличивают свой индекс на 1.
После чего просмотреть диагональ и повторить алгоритм начиная не с (0,0), а с (1,1)
столбец и строку поставить на следующее место (не трогая предыдущего максимума)
и так до (n-2,n-2)
Затем переставить столбец с максимумом в первый столбец,
Остальные столбцы левее переставляемого увеличивают свой индекс на 1.
а затем строку с максимумом переставить в первую строку.
Остальные строки выше переставляемой увеличивают свой индекс на 1.
После чего просмотреть диагональ и повторить алгоритм начиная не с (0,0), а с (1,1)
столбец и строку поставить на следующее место (не трогая предыдущего максимума)
и так до (n-2,n-2)
наверное имеется ввиду главная диагональ, эт вот эта 

Похожие вопросы
- Дан массив N<100 целых чисел. Упорядочить элементы по убыванию и вывести те элементы, которые остались на своих места
- дан двумерный массив С(3,4).Получите новый массив А путём увеличения всех элементов исходного массива на число С.
- помогите? Дан массив целых чисел (n=15),
- дан массив целых чисел F1,F2...Fn. распечатать элементы, нах-ся между min и max и их номера. подскажите где я ошибся
- даны 3 разл целых числа a,b,c используя оператор GOTO составить программу для ввода чисел в порядке убывания
- Дан двумерный массив А [7,8], заполненный случайным образом. Заменить нечетные элементы массива на число 0 СРОЧНОО ГАЙСЫ
- Объявить массив целых чисел и заполнить его случайными значенниями.
- 1. Написать программу, которая заполняет массив целых чисел размеров 20 элементов значениями роста учащихся (случайные ч
- Дан двумерный массив
- Дан двумерный массив.