2015-11-02 100 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 

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