#include <locale>
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
#include <numeric>
/*
В прямоугольной матрице найти максимальное среднее арифметическое
среди средних арифметических каждой строки матрицы
и вычесть его из всех элементов матриц, кроме элементов одной заданной строки
*/
template <typename T, size_t Rows>
struct avg : public std::unary_function<const T (&)[Rows], double>
{
T operator()(const T (&arr)[Rows]) const
{
return std::accumulate(arr, arr + Rows, T()) / Rows;
}
};
template <typename T, size_t Cols, size_t Rows>
void go(T (&m)[Cols][Rows])
{
std::vector<T> v(Cols);
std::transform(
&m[0][0], &m[0][0] + Cols*Rows, &m[0][0],
std::bind2nd(std::minus<T>(), *std::max_element(v.begin(),
std::transform(m, m + Cols, v.begin(), avg<T, Rows>())))
);
}
template <typename T, size_t Rows>
struct X : public std::unary_function<const T (&)[Rows], void>
{
X(std::ostream& os) : os_(os) {}
void operator()(const T (&arr)[Rows]) const
{
typedef std::ostream_iterator<T> O;
std::copy(arr, arr+Rows, O(os_, "\t"));
os_ << std::endl;
}
std::ostream& os_;
};
template <typename T, size_t Cols, size_t Rows>
std::ostream& operator<< (std::ostream& os, const T (&m)[Cols][Rows])
{
std::for_each(m, m+Cols, X<T, Rows>(os));
return os;
}
int main()
{
setlocale(LC_ALL, "");
double m[3][4] = {
{1,2,3,4},
{1,-2,-3,4},
{-1,-2,3,4}
};
std::cout << "Before:" << std::endl << m << std::endl;
go(m);
std::cout << "After:" << std::endl << m;
return 0;
}
матрица
В прямоугольной матрице найти максимальное среднее арифметическое среди средних арифметических каждой строки матрицы и вычесть его из всех элементов матриц, кроме элементов одной заданной строки
напиши что уже сделал и в чем ты не разбираешься, тогда услышишь что-то полезное!
да чего уж там, поможем студню :D
но полной халявы не будет, поэтому решение чуть изменено, и среднее арифметическое вычитается из всех строк матрицы
чтобы было кроме заданной строки - это домашнее задание.
Код:
Вывод программы:
http://codepad.org/6jAQZgBb
я сам только сегодня узнал, что мне это надо делать
поэтому решил сюда написать
Rififi, ты коварен, чудовищно коварен...
Код:
matrix = [[1,2,3,4], [1,-2,-3,4], [-1,-2,3,4]]
maxMean = max(map(lambda x: float(sum(x))/len(x), matrix))
matrix = [[i - maxMean for i in row] for row in matrix]
for row in matrix: print row
maxMean = max(map(lambda x: float(sum(x))/len(x), matrix))
matrix = [[i - maxMean for i in row] for row in matrix]
for row in matrix: print row
http://codepad.org/FpyQGrmL
Украшательства с До и После использовать не стал.
Да, домашнее задание автору оставил :)