C++ 求矩阵中所有可能的和

C++ 求矩阵中所有可能的和,c++,math,C++,Math,我试图写一个代码,在2d矩阵中找到所有可能的数字的总和。 但关键是必须从一行中选择一个元素 #include <algorithm> #include <iostream> #include <vector> #include <climits> #include <math.h> using namespace std; int main() { int n; cin>>n; int array[

我试图写一个代码,在2d矩阵中找到所有可能的数字的总和。 但关键是必须从一行中选择一个元素

#include <algorithm>
#include <iostream>
#include <vector>
#include <climits>
#include <math.h>
using namespace std;
int main() { 
    int n;
    cin>>n;
    int array[n][n]={0};
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cin>>array[i][j];
        }
    }
    int power=pow(n,n);
    int sum[power]={0};
    for(int i=0;i<power;i++){
        for(int j=0;j<n;j++){
            for(int l=0;l<n;l++){
                sum[i]=sum[i]+array[j][l];
            }
        }
    }
    for(int i=0;i<power;i++){
        cout<<sum[i]<<" ";
    }
    return 0;
}

这应该是输出,但它只给出5个

您的核心循环完全错误。如果希望
sum[i]
包含给定路径的值,则需要将
i
视为通过矩阵的路径

一般来说,将
i
视为以n为基数的数字(例如,2)。 这意味着

i=idx_1*n^(n-1)+idx_2*n^(n-2)+…+idx_n

通过重复除以n并取余数,可以恢复各种索引:

for(uint64_t i=0;i<power;i++){
   sum[i] = 0;
   uint64_t encoded_index = i;
   for (size_t j = 0; j < n; j++) {
       uint64_t index_j = encoded_index % n;
       encoded_index /= n;
       sum[i] += hist[j][index_j];
   }
}

< Unt64 64 t i=0;IpCube将此作为您先前问题的精确复制:至少告诉我们为什么你要问一个新问题。为什么使用简单的老数组而不是<代码> STD::向量< /代码>?为什么使用不属于C++标准的可变长度数组(<代码> int数组[n] [n]={ 0 };< />代码)为什么您试图初始化任何标准都不支持的VLA?另请参见,请不要发布重复的问题。
2, 3, 2, 3
for(uint64_t i=0;i<power;i++){
   sum[i] = 0;
   uint64_t encoded_index = i;
   for (size_t j = 0; j < n; j++) {
       uint64_t index_j = encoded_index % n;
       encoded_index /= n;
       sum[i] += hist[j][index_j];
   }
}