如何在C ++中找到给定矩阵(matrix[i][j]
)中的最大值,最小值和平均值。类型是unsigned long double。
答案 0 :(得分:9)
这里没有什么聪明的做法(仅限伪代码,因为它闻起来像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
条目。
答案 1 :(得分:3)
也许这个:
<强>最大强>:
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;
答案 2 :(得分:3)
假设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
的另一个容器类型,那么你必须在每一行上运行算法并取每行的最大值。
答案 3 :(得分:1)
循环显示所有值,记录当前最大值,最小值和累计总和。然后将累积和除以元素数得到均值。