基于C++中每一行的总和对2D阵列进行排序

Order 2D Arrays based on a sum of each row in C++

本文关键字:2D 排序 阵列 一行 C++ 基于      更新时间:2023-10-16

这些问题几乎概括了这一点。到目前为止,我拥有的是:

#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循环中循环,把每一行加成一个和,然后返回和并对所有行求平均值?(这可能需要不止一个函数,但……不管怎样。)

如果您希望每行的总和以升序显示,下面的代码将执行此操作。。。

// #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;
}

我觉得你是个很酷的程序员。你不寻求简单的方法。

当然,你可以使用一个求和数组,但这似乎太容易了。

那么,试试下面的

#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

有了这些总和,你可以找到任何平均值。我希望你自己做这件事。