Поиск максимального и минимального элементов двумерного динамического массива
Как поменять местами максимальный и минимальный элемент?
#include <iostream>
#include <locale>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int N;
cout << "Введите размер квадратной матрицы N:";
cin >> N;
float **arr = new float *[N];
for (int i = 0; i < N; i++)
{
arr[i] = new float[N];
}
for(int i=0; i<N;i++)
{
for (int j = 0; j < N; j++)
{
arr[i][j]=rand() % 100;
cout << arr[i][j]<<"\t";
}
cout << endl;
}
int max = arr[0][0];
int min = max;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (max < arr[i][j])
max = arr[i][j];
}
}
cout <<"MAX="<< max<<endl;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (min > arr[i][j])
min = arr[i][j];
}
}
cout << "MIN=" <<min;
cout << endl;
for(int i=0; i<N; i++)
{
delete[] arr[i];
}
delete[] arr;
return 0;
}
Ответы (3 шт):
Автор решения: Rikitikitavi
→ Ссылка
Максимальный и минимальный элемент вы уже нашли, теперь в тех местах где вы их сохраняете, сохраните также индексы и передайте в эту функцию:
void swap(const int maxI, const int maxJ, const minI const minJ, float** matrix)
{
const float tmp = matrix[maxI][maxJ];
matrix[maxI][maxJ] = matrix[minI][minJ];
matrix[minI][minJ] = tmp;
}
Автор решения: Никита Самоуков
→ Ссылка
Использовать std::swap.
Искать через std::min_element.
Таблицу уложить в один std::vector, а не двумерный массив.
Автор решения: sibedir
→ Ссылка
#include <iostream>
#include <locale>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
//ввод размера
int N;
cout << "Введите размер квадратной матрицы N: ";
cin >> N;
cout << endl;
// выделяем память одним куском
int *arr = new int[N*N];
// заполняем и выводим
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr[i*N+j] = rand() % 100;
cout << arr[i*N+j] << "\t";
}
cout << endl;
}
cout << endl;
// ищем адреса с MAX и MIN
int* max = arr; // можно &arr[0] для наглядности
int* min = max;
for (int* cur = arr, *end = &arr[N*N]; cur < end; cur++) {
if (*max < *cur) max = cur;
if (*min > *cur) min = cur;
}
// выводим их значения
cout << "MAX = " << *max << endl;
cout << "MIN = " << *min << endl;
cout << endl;
// меняем местами
std::swap(*min, *max);
//выводим
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
cout << arr[i * N + j] << "\t";
cout << endl;
}
cout << endl;
// освобождаем память
delete[] arr;
return 0;
}
- !!! Будте внимательнее с типами. В Вашем исходном коде тип максимума и минимума не соответствует типу значений элементов массива.
- Выделять память под массив можно и как в вашем коде (построчно) и обращаться к элементам массива через [i][j]. Так, наверное, даже будет выглядеть аутентичнее для новичка. Но тем не менее понимание адресной арифметики - это фундаментальные знания в программировании. Очень советую.