在C++中查找矩阵的最大值,最小值和平均值
答
遍历所有值,记录当前的最大值,最小值和累计和。然后用累积和除以元素数来得到平均值。
答
没有什么聪明,在这里完成的(只有伪代码,因为这闻起来像HW):
for each entry in the matrix:
add the entry to a running sum
compare the entry to a running min
if it's smaller, it's the new running min
compare the entry to a running max
if it's larger, it's the new running max
average is the sum divided by the number of entries
可微优化这个循环,使其或多或少的效率,但没有什么可以做算法上更聪明。无论如何,您都需要查看所有i*j
条目。
答
也许这:
最大:
int maximum = 0;
for(int x=0; x<width; ++x)
for(int y=0; y<height; ++y)
maximum = std::max(matrix[x][y], maximum);
最低:
int minimum = 0;
for(int x=0; x<width; ++x)
for(int y=0; y<height; ++y)
minimum = std::min(matrix[x][y], minimum);
Avarage:
int avarage = 0;
for(int x=0; x<width; ++x)
for(int y=0; y<height; ++y)
avarge += matrix[x][y];
avarge /= width*height;
答
假设matrix
是一个实际的C++二维数组,你可以使用标准算法。
未经测试的代码:
long double mean = std::accumulate(matrix[0], matrix[0] + i*j, 0.0)/(i*j);
long double matrix_min = std::min_element(matrix[0], matrix[0] + i*j);
long double matrix_max = std::max_element(matrix[0], matrix[0] + i*j);
请注意,这样做额外越过矩阵,由于它是清楚它在做什么好处。
如果是另一种类型的容器,如vector
的vector
,那么您必须在每一行上运行算法,并取每行的最大值。
** unsigned ** long double?你的平台有无符号浮点类型? – 2011-02-08 16:36:28
这是您在过去几个小时就此主题询问的第三个问题。这些家庭作业问题是偶然的吗? – 2011-02-08 16:37:35