C/C++

С++ | Как заменить макс. элементы (могут быть введены любые) массива на нули и вывести изменённый массив уже с нолями?!

Надо максимальные элементы массива заменить на нули при выводе, я пытался сделать чёто типа if ( i == max )
i = 0;
перед выводом в cout... но этот бред не работает
► Код:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<string.h>
using namespace std;
int main()
{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

const int maxn = 10; // Максимальное кол-во строк

const int maxm = 10; // Максимальное количество столбцов

int n; // Количество строк

int m; // Количество столбцов

int i, j; // Параметр цикла

int max; // Максимальный элемент строки

int sum_row;

int arr[maxn][maxm];

cout << "Введите количество строк\t";

cin >> n;

cout << "Введите количество столбцов\t";

cin >> m;

sum_row = 0;

// Введение элементов массива:

for (i = 0; i <= n - 1; i++)

{

for (j = 0; j <= m - 1; j++)

{

cout << "Введите элемент массива arr " << i + 1 << ", " << j + 1 << " =\t";

cin >> arr[i][j];

sum_row += arr[i][j];


}

}

cout << endl;

// Поиск суммы каждой строки

for (i = 0; i <= n - 1; i++)

{

sum_row = 0;

for (j = 0; j <= m - 1; j++)

sum_row += arr[i][j];

cout << "Сумма " << i + 1 << " -й строки = " << sum_row << endl;

}

cout << endl;

// Поиск максимального элемента каждой строки

for (i = 0; i <= n - 1; i++)

{

max = arr[i][0];

for (j = 0; j <= m - 1; j++)

{

if (max <= arr[i][j])

max = arr[i][j];

}

cout << "Максимальное значение " << i + 1 << " -й строки = " << max << endl;

cout << endl;

}


for (i = 0; i <= n - 1; i++) // Вывод элементов массива

{

for (j = 0; j <= m - 1; j++)

cout << arr[i][j] << " ";

cout << endl;

}
return 0;
}
Дана матрица.
Надо заменить максимальные элементы каждой строки на ноль или максимальные элементы все матрицы?
То есть, если будет дана такая матрица:
1 2 3
4 8 4
8 8 2
то какой результат должен быть?
1 2 0
4 0 4
0 0 2
ИЛИ
1 2 3
4 0 4
0 0 2
?
Ермек Ахметов
Ермек Ахметов
492
Лучший ответ
Юрий Прогонный каждой строки,
1 2 0
4 0 4
0 0 2
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <random>
using namespace std;
size_t length(const char* msg, const size_t max_length) {
auto value = 0U;
while (!value || value > max_length) {
cout << msg;
cin >> value;
}
return value;
}
void show_line(const int* line, const size_t len) {
for (auto i = 0U; i < len; ++i) cout << setw(3) << line[i];
puts("");
}
int main() {
uniform_int_distribution<> uid(1, 9);
mt19937 gen{ random_device()() };
auto rand = [&] { return uid(gen); };
const auto max_rows = 10U;
const auto max_columns = 10U;
int matrix[max_rows][max_columns]{};
system("chcp 1251 > nul");
auto rows = length("Количество строк: ", max_rows);
auto columns = length("Количество столбцов: ", max_columns);
for (auto i = 0U; i < rows; ++i) {
generate(matrix[i], matrix[i] + columns, rand);
show_line(matrix[i], columns);
}
puts("");
for (auto i = 0U; i < rows; ++i) {
auto max = *max_element(matrix[i], matrix[i] + columns);
replace(matrix[i], matrix[i] + columns, max, 0);
}
for (auto i = 0U; i < rows; ++i) {
show_line(matrix[i], columns);
}
system("pause > nul");
}

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