2015-11-02 39 views
-5

這些問題幾乎總結了它。這是我到目前爲止有:基於C++中每一行的總和來排列二維數組

#include "stdafx.h" 
#include <iostream> 

using namespace std; 

int main() 
{ 

    int sum1; 
    int sum2; 
    int sum3; 
    int sum4; 
    int sum5; 
    int sum6; 
    int sum7; 
    int sum8; 

    int a[8][7] = { 
     { 2, 4, 3, 4, 5, 8, 8 } , 
     { 7, 3, 4, 3, 3, 4, 4 } , 
     { 3, 3, 4, 3, 3, 2, 2 } , 
     { 9, 3, 4, 7, 3, 4, 1 } , 
     { 3, 5, 4, 3, 6, 3, 8 } , 
     { 3, 4, 4, 6, 3, 4, 4 } , 
     { 3, 7, 4, 8, 3, 8, 4 } , 
     { 6, 3, 5, 9, 2, 7, 9 } 
    }; 

    for(int i = 0; i < 8; i++) { 

    } 
} 

我打算在分配每個值從SUM1總和sum8到一排,然後通過其總和訂購的每一行,並顯示給用戶。

但是,我一直卡住,找不到任何好的文檔。任何人都可以幫我寫一個有效的函數,我可以在我的for循環中循環添加每一行到一個總和,然後返回總和和平均所有行? (這可能將不得不不止一個功能,但...不管。)

+0

真的嗎?你找不到一個好的文檔?那麼你在看什麼文件? –

+0

如果我理解正確,對於每一行你想要的總和和平均值。所以,就像'a'一樣,'sum'也可以是一個數組''int sum [8]'。然後,在你顯示的'for'裏面,對於數組中的每一行,你都可以計算出該行的總和(使用另一個),並將值保存在變量sum [i]上。之後,由於您知道每行的總和,因此可以通過除以列的數量(8)來計算平均值。如果你想根據總和進行排序,我會建議使用'std :: vector'矢量和'std :: sort'方法來定製'compare'方法。 – wendelbsilva

+0

進入'std :: vector >',使用'std :: sort'和一個lambda表達式,在這個lambda表達式中你用'std :: accumulate'計算兩個和並比較它們。完成。 –

回答

0

如果你想按升序排列顯示每行的總和,下面的代碼將做到這一點...

// #include "stdafx.h" 
#include <iostream> 
#include <algorithm> 
#include <iterator> 

using namespace std; 

int main() 
{ 

    int sums[8] = {0}; 

    int a[8][7] = { 
     { 2, 4, 3, 4, 5, 8, 8 } , 
     { 7, 3, 4, 3, 3, 4, 4 } , 
     { 3, 3, 4, 3, 3, 2, 2 } , 
     { 9, 3, 4, 7, 3, 4, 1 } , 
     { 3, 5, 4, 3, 6, 3, 8 } , 
     { 3, 4, 4, 6, 3, 4, 4 } , 
     { 3, 7, 4, 8, 3, 8, 4 } , 
     { 6, 3, 5, 9, 2, 7, 9 } 
    }; 

    // calculate the sums 
    for (int i = 0; i < 8; i++) { 
     for (int j = 0; j < 7; j++) { 
      sums[i] += a[i][j]; 
     } 
    } 

    sort(begin(sums), end(sums)); // sort the sums 

    copy(begin(sums), end(sums), ostream_iterator<int>(cout, " ")); // display the sums 

    return 0; 
} 
0

我看你是個很酷的程序員。你不尋求一個簡單的方法。

當然,你可以使用一系列的總和,但它似乎太簡單了。

好,那麼請嘗試以下

#include <iostream> 
#include <numeric> 

int main() 
{ 
    int sum1; 
    int sum2; 
    int sum3; 
    int sum4; 
    int sum5; 
    int sum6; 
    int sum7; 
    int sum8; 

    int a[8][7] = { 
     { 2, 4, 3, 4, 5, 8, 8 } , 
     { 7, 3, 4, 3, 3, 4, 4 } , 
     { 3, 3, 4, 3, 3, 2, 2 } , 
     { 9, 3, 4, 7, 3, 4, 1 } , 
     { 3, 5, 4, 3, 6, 3, 8 } , 
     { 3, 4, 4, 6, 3, 4, 4 } , 
     { 3, 7, 4, 8, 3, 8, 4 } , 
     { 6, 3, 5, 9, 2, 7, 9 } 
    }; 


    size_t i = 0; 
    for (auto p : { &sum1, &sum2, &sum3, &sum4, &sum5, &sum6, &sum7, &sum8 }) 
    { 
     *p = std::accumulate(a[i], a[i] + 7, 0); 
     ++i; 
    } 

    for (int x : { sum1, sum2, sum3, sum4, sum5, sum6, sum7, sum8 }) std::cout << x << std::endl; 
}  

輸出是

34 
28 
20 
31 
32 
28 
37 
41 

具有資金,你可以找到任何的平均水平。我希望你自己能做到這一點。