C/C++

Как написать код по этому заданию? Программирование на Си

Для заданного двумерного массива из n строк и m столбцов: Найти такие k, для которых среднее арифметическое k-ой строки массива совпадает со средним арифметическим k-ого столбца.
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <random>
#include <numeric>
using namespace std;
int main() {
uniform_int_distribution<> uid(1, 3);
mt19937 gen{ random_device()() };
auto rand = [&] { return uid(gen); };
auto print = [](int x) { cout << setw(2) << x; };
const auto n = 25U, m = 25U;
int matrix[n][m];
for (auto& row : matrix) generate(row, row + m, rand);
for (const auto& row : matrix) {
for_each(row, row + m, print);
puts("");
}
puts("");
double rows[n];
for (auto i = 0U; i < n; ++i) rows[i] = accumulate(matrix[i], matrix[i] + m, 0) / double(m);
double cols[m];
for (auto j = 0U; j < m; ++j) {
auto sum = 0.;
for (auto i = 0U; i < n; ++i) sum += matrix[i][j];
cols[j] = sum / n;
}
auto x = n < m? n : m;
for (auto k = 0U; k < x; ++k) {
if (rows[k] == cols[k]) {
cout << setw(3) << k << '\n';
}
}
puts("");
system("pause");
}
Nikita Russov
Nikita Russov
70 229
Лучший ответ
Юрий Люкин Поздравляю Вас с энтузиазмом!

Тако-о-о-ой огромный труд!!!

Когда-нибудь автор вопроса освоит язык C++ и воспользуется Вашим кодом.
Юрий Люкин    ПРИВЕТ, ВИТЕБСК!
Павел Мецкер 52/25 не может быть равно 16/10 :)))
Написать-то можно.
Это должна быть квадратная матрица с одинаковыми значениями как в k-том столбце, так и в k-той строке.
При случайном определении программой размерности столбцов и строк маловероятно нахождение значения k.
Какой смысл писать код?
Геннадий Балыклов Это не я придумала, у меня задание такое
Юрий Люкин Евгений, полагаю, что Вы просто устали (я, кстати, тоже в последнее время чувствую себя уставшим, должно быть сказывается солнцедефицит).

Матрица n×m не обязана быть квадратной, просто в начале программы необходимо проверить условие k ≤ min(n,m).

Весьма занимательная задачка ...для математиков. {)
Юрий Люкин Ух, вот, что я не заметил сразу: первый цикл работает вхолостую (бесполезно), поскольку сразу после заголовка стоит точка с запятой!

for (int k = 0; k < min[n, m]; ++k);

Уберите точку с запятой и перенесите открывающую фигурную скобку!

for (int k = 0; k < min[n, m]; ++k)
{
r = c = 0;
for (int j = 0; j < m; r += array[k][j++]);
for (int j = 0; j < n; c += array[j++][k]);
if (r * n == c * m) {

printf("%d ", k); }

}
Ирик Мухамадиев Лажа полная:)
И условия задачи подгоняются на ходу:)
Не серьёзно
Юрий Люкин Пожалуйста, не жалейте слов на комментарии в коде программы — не придётся каждый раз разбираться в одном и том же, не понадобится перенапрягать память.

Компилятору плевать на любые комментарии, но разбираться в коде станет гораздо проще.

Пример:

for (int j = 0; j < m; r += array[k][j++]); // суммируем все элементы в k-й строке