2011-02-08 398 views
-3

如何在C++中找到給定矩陣(matrix[i][j])中的最大值,最小值和平均值。該類型是無符號long double。在C++中查找矩陣的最大值,最小值和平均值

+4

** unsigned ** long double?你的平臺有無符號浮點類型? – 2011-02-08 16:36:28

+4

這是您在過去幾個小時就此主題詢問的第三個問題。這些家庭作業問題是偶然的嗎? – 2011-02-08 16:37:35

回答

1

遍歷所有值,記錄當前的最大值,最小值和累計和。然後用累積和除以元素數來得到平均值。

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條目。

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; 
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); 

請注意,這樣做額外越過矩陣,由於它是清楚它在做什麼好處。

如果是另一種類型的容器,如vectorvector,那麼您必須在每一行上運行算法,並取每行的最大值。

相關問題