C/C++

Задача на С++

Дана целочисленная матрица {Aij}i=1..n,j=1..m (n,m<=100). Найти столбец содержащий наименьший элемент матрицы и заменить все отрицательные элементы этого столбца числом 0.
Nicolay Marakin
Nicolay Marakin
76
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
srand(time(nullptr));
rand();
int n,m;
do
{
cout << "Введите n: ";
cin >> n;
}while(n < 1 || n > 100);
do
{
cout << "Введите m: ";
cin >> m;
}while(m < 1 || m > 100);
int ** A;
A = new int * [n];
for(int x = 0; x < n; x++)
A[x] = new int[m];

for(int x = 0; x < n; x++)
{
for(int y = 0; y < m; y++)
{
A[x][y] = rand() % 31 - 15;
cout << A[x][y] << '\t';
}
cout << endl;
}

int st = 0;
int min = A[0][0], tmp;
for(int y = 0; y < m; y++)
{
tmp = A[0][y];
for(int x = 1; x < n; x++)
{
if(A[x][y] < tmp) tmp = A[x][y];
}
if(tmp < min)
{
min = tmp;
st = y;
}
}

cout << endl << "Столбец " << st + 1 << " содержит минимальный элемент." << endl << endl;

for(int x = 0; x < n; x++)
{
for(int y = 0; y < m; y++)
{
if(A[x][y] < 0) A[x][y] = 0;
cout << A[x][y] << '\t';
}
cout << endl;
}

if(A == (int **) nullptr) return 1;
for(int x = 0; x < n; x++)
{
if(A[x] == (int*) nullptr) return 1;
delete [] A[x];
A[x] = (int*) nullptr;
}
delete [] A;
A = (int**) nullptr;

return 0;
}
УГ
Ульфат Горбунов
86 952
Лучший ответ
С матрицей псевдослучайных чисел из диапазона [-99;99], с двумерным динамическим массивом и в случае первого минимального элемента если их больше одного. А если матрица слишком большая чтобы уместиться в экран, функцию вывода матрицы лучше убрать -программа всё равно всё сделает правильно.
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
void print_matrix(int **a, int k, int l)
{
int i, j;
for (i = 0; i < k; i++)
{
for (j = 0; j < l; j++) cout << setw(4) << a[i][j];
cout << endl;
}
}
int main()
{
int i, j, m, n, min = 100, column;
cout << "n m: ";
cin >> n >> m;
int **A = new int *[n];
for (i = 0; i < n; i++) A[i] = new int [m];
srand(time(nullptr));
for (i = 0; i < n; i++) for (j = 0; j < m; j++)
{
A[i][j] = rand() % 199 - 99;
if (A[i][j] < min)
{
min = A[i][j];
column = j;
}
}
cout << "\nMatix A:" << endl;
print_matrix(A, n, m);
cout << "\nmin = " << min << " in column "<< column + 1 <<
"\n\nMatrix A after tranformation:" << endl;
for (i = 0; i < n; i++) if (A[i][column] < 0) A[i][column] = 0;
print_matrix(A, n, m);
}