C++ 求矩阵中所有可能的和
我试图写一个代码,在2d矩阵中找到所有可能的数字的总和。 但关键是必须从一行中选择一个元素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[
#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];
}
}