基于C ++中每行的总和来订购2D数组

时间:2015-11-02 21:09:34

标签: c++ arrays

这些问题几乎总结了一下。这就是我到目前为止所拥有的:

#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循环中循环,将每一行添加到一个总和,然后返回总和并平均所有行? (这可能不仅仅是一个功能,而是......无论如何。)

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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

有了总和,你可以找到任何平均值。我希望你自己能做到这一点。