C/C++
Работа с многомерным статическим массивом на с++
Задание состоит в перестановке максимальных элементов в основную диагональ матрицы .Идей, как это гуманно и более универсально это сделать, нет .На уме только создание нескольких переменных под максимальные и перестановке их непосредственно по индексам в известный по размерам массив .Прошу подсказать способ получше
#include <algorithm>
#include <iostream>
#include <random>
#include <iomanip>
#include <vector>
using namespace std;
int main() {
const auto n = 5U;
int matrix[n][n];
uniform_int_distribution<> uid(1, 99);
mt19937 gen{ random_device()() };
auto rand = [&] {return uid(gen); };
for (auto& row : matrix) generate(begin(row), end(row), rand);
auto show = [](int x) { cout << setw(5) << x; };
for (auto& row : matrix) {
for_each(begin(row), end(row), show);
puts("\n");
}
puts("");
vector<int> box;
for (const auto& row : matrix) for (auto x : row) box.push_back(x);
sort(begin(box), end(box), greater<>());
for (auto i = 0U; i < n; ++i) {
if (matrix[i][i] == box[i]) continue;
for (auto j = 0U; j < n; ++j) {
for (auto k = 0U; k < n; ++k) {
if (matrix[j][k] == box[i]) {
if (j == k && j < i) continue;
swap(matrix[j][k], matrix[i][i]);
break;
}
}
}
}
for (auto& row : matrix) {
for_each(begin(row), end(row), show);
puts("\n");
}
system("pause > nul");
}
#include <iostream>
#include <random>
#include <iomanip>
#include <vector>
using namespace std;
int main() {
const auto n = 5U;
int matrix[n][n];
uniform_int_distribution<> uid(1, 99);
mt19937 gen{ random_device()() };
auto rand = [&] {return uid(gen); };
for (auto& row : matrix) generate(begin(row), end(row), rand);
auto show = [](int x) { cout << setw(5) << x; };
for (auto& row : matrix) {
for_each(begin(row), end(row), show);
puts("\n");
}
puts("");
vector<int> box;
for (const auto& row : matrix) for (auto x : row) box.push_back(x);
sort(begin(box), end(box), greater<>());
for (auto i = 0U; i < n; ++i) {
if (matrix[i][i] == box[i]) continue;
for (auto j = 0U; j < n; ++j) {
for (auto k = 0U; k < n; ++k) {
if (matrix[j][k] == box[i]) {
if (j == k && j < i) continue;
swap(matrix[j][k], matrix[i][i]);
break;
}
}
}
}
for (auto& row : matrix) {
for_each(begin(row), end(row), show);
puts("\n");
}
system("pause > nul");
}
Александр Богомолов
спасибо большое за проделанную работу, но крайне жаль что в данный момент на моем уровне изучения я понимаю от силы пару строк)
Ты че мне 22 и я ничего не понял почувствал себя пенсионером. Ты сума сошел такие сложные вопросы и слова сочитать
Александр Богомолов
дядя а что вы тогда делаете в категории с программированием ?
Многомерный это 2, 3 и более размерный? Или вы имели в виду 2-мерный?
Если можно создавать доп. массив, то наверное лучше его создать и с ним работать. Ведь его размер это корень N степени от количества элементов, а значит - небольшой. После этого пройти по всем элементам исходного массива и добавить их в доп массив в сортированном виде. Если доп массив заполнен и элемент меньше меньшего - игнорировать, а иначе вставить в сортированный массив.
Ну а значением хранимым в доп массиве может быть значение матрицы или позиция этого значения. В зависимости от того, что вам надо...
После этого скопировать (переставить) в диагональ.
Если можно создавать доп. массив, то наверное лучше его создать и с ним работать. Ведь его размер это корень N степени от количества элементов, а значит - небольшой. После этого пройти по всем элементам исходного массива и добавить их в доп массив в сортированном виде. Если доп массив заполнен и элемент меньше меньшего - игнорировать, а иначе вставить в сортированный массив.
Ну а значением хранимым в доп массиве может быть значение матрицы или позиция этого значения. В зависимости от того, что вам надо...
После этого скопировать (переставить) в диагональ.
Александр Богомолов
Похоже я неправильно понимаю ...
Необходимо найти определенное количество максимальных значений, которое будет соответствовать количеству строк ( решила сделать из массива квадратную матрицу, следовательно размер диагонали равен количеству элементов в строке), потом эти элементы перекинуть в новый массив одномерный, как-то отсортировать методом сравнения и вывести полученное.
Однако проблемы начались на первом этапе, тк создала новый цикл с подсчетом максимальных по массиву но для этого все равно были нужно было вводить переменные max1 и тд, дабы найти несколько последующих значений после максимального
Необходимо найти определенное количество максимальных значений, которое будет соответствовать количеству строк ( решила сделать из массива квадратную матрицу, следовательно размер диагонали равен количеству элементов в строке), потом эти элементы перекинуть в новый массив одномерный, как-то отсортировать методом сравнения и вывести полученное.
Однако проблемы начались на первом этапе, тк создала новый цикл с подсчетом максимальных по массиву но для этого все равно были нужно было вводить переменные max1 и тд, дабы найти несколько последующих значений после максимального
Похожие вопросы
- Помогите, пожалуйста решить на C++, используя многомерные статические массивы
- Помогите решить задачу на С++, используя статические массивы
- Constexpr инициализация статических массивов.
- Составить программу для обработки одномерных статических массивов.
- Устройство статических и динамических массивов в оперативной памяти (...)
- Программирование алгоритмов обработки многомерных массивов.
- Объясните мне разное поведение sizeof для статической константы и динамического массива. C.
- C++\Работа с одномерными массивами: удаление, добавление, перестановка, поиск
- Программирования c++ Програмировние обработки многомерных массивов
- Заменить нулями элементы массива, которые расположены между первым минимальным и последним максимальным элементами масси