C/C++

Как написать код для этого задания на языке С++

Дана вещественная матрица размера N×M. Уменьшить на K элементы двух столбцов матрицы, сумма элементов которых максимальна. Значение К вводит пользователь. Полученную матрицу вывести на экран. Только без использования векторов
Vadim V
Vadim V
173
Пальцами в клавиатуру: тык-тык-тык. Примерно так...
ДК
Денис Киреев
51 669
Лучший ответ
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
const int N = 5, M = 4;
double A[N][M];
srand(time(NULL));
for(int x = 0; x < N; x++)
{
for(int y = 0; y < M; y++)
{
A[x][y] = (rand() % 301 - 150)*.01;
cout << A[x][y] << '\t';
}
cout << endl;
}
cout << endl;
double K;
cout << "Введите K: ";
cin >> K;

double sum[M];
for(int y = 0; y < M; y++)
{
sum[y] = 0.;
for(int x = 0; x < N; x++)
sum[y] += A[x][y];
}

int i_max1 = 0, i_max2 = 0;
for(int y = 0; y < M; y++)
{
if(sum[y] > sum[i_max2]) i_max2 = y;
if(sum[i_max2] > sum[i_max1])
{
int tmp = i_max1;
i_max1 = i_max2;
i_max2 = tmp;
}
else if(sum[i_max2] == sum[i_max1]) i_max2 = y;
}

for(int y = 0; y < M; y++)
for(int x = 0; x < N; x++)
if(y == i_max1 || y == i_max2) A[x][y] -= K;

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

return 0;
}
всё дописал теперь

#include iostream

double sum_column(double **arr, const int &n, const int &column){
double res = 0;
for(int i = 0; i < n;++i){
res+=arr[i][column];
}
return res;
}

int main(){
int n,m;
double k;
std::cin >> n >> m >> k;
double **arr = new double*[n];
for(int i = 0; i < n;++i){
arr[i] = new double[m];
}
for(int i = 0; i < n; ++i){
for(int j = 0; j < m; ++j){
std::cin >> arr[i][j];
}
}
int max_index1, max_index2;
double max_sum1, max_sum2;
max_sum1 = sum_column(arr, n,0);
max_sum2 = sum_column(arr, n, 1);
if(max_sum2 > max_sum1) std::swap(max_sum1,max_sum2);
for(int i = 2; i < m;++i){
auto temp = sum_column(arr,n,i);
if(temp > max_sum1){
max_sum2 = max_sum1;
max_sum1 = temp;
max_index2 = max_index1;
max_index1 = i;
}
else if(temp > max_sum2){
max_sum2 = temp;
max_index2 = i;
}
}
for(int i = 0; i < n;++i){
arr[i][max_index1]-=k;
arr[i][max_index2]-=k;
}
for(int i = 0; i < n;++i){
for(int j = 0; j < m;++j){
std::cout << arr[i][j] <<' ';
}
std::cout << std::endl;
}
return 0;
}
Денис Бастриков for(int i = 0; i < n;++i) {
delete[] arr[i;]
}
delete[] arr;
забыл добавить