给定一个大小为nxm的矩阵,我们如何计算大小为(L)的所有可能的平方矩阵的和
Given a matrix of size nxm, how can we calculate the sum of all possible square matrices of size (L)?
给定这个3x3(nxm(矩阵,我如何遍历并获得所有可能的平方子矩阵的和,即(在这种特殊情况下为1x1,2x2(
2 2 3
3 4 5
4 5 5
我知道这里,每个元素都是单独的子矩阵(1x1(,其余正方形子矩阵如下:
2 2
3 4
2 3
4 5
3 4
4 5
4 5
5 5
我尝试过我的方法,但多次失败,主要原因是我在编程中对矩阵感到困惑。我的方法:这里,'l'是正方形子矩阵的大小,'n'是主矩阵的行的大小,'m'是主阵的列的大小,
for (i=0; i<n-l; i++){
for (j=1; j<n-i+1; j++){
sum = 0;
for (p=i; p<l+i; p++){
for (q=1; q<l+j+1; q++){
sum += a[p][q];
}
}
cout << sum << endl;
}
l++;
}
这是您的案例的解决方案。
for(int i=0; i+(l-1)<n; i++){
for(int j=0; j+(l-1)<m; j++){
int sum = 0;
for(int a=0; a<l; a++){
for(int b=0; b<l; b++){
sum += matrix[i+a][j+b];
}
}
cout << sum << endl;
}
}
或者你可以尝试在Tio.run 上运行完整的代码
我重写了您的代码以使其正确,还做了完整的示例:
在线试用!
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<std::vector<int>> a = {{2, 2, 3}, {3, 4, 5}, {4, 5, 5}};
size_t n = a.size(), m = a.size() > 0 ? a[0].size() : 0;
for (size_t l = 1; l <= std::min(n, m); ++l)
for (size_t i = 0; i < n - l + 1; ++i)
for (size_t j = 0; j < m - l + 1; ++j) {
int sum = 0;
for (size_t p = i; p < i + l; ++p)
for (size_t q = j; q < j + l; ++q)
sum += a[p][q];
std::cout << l << ", " << i << ", " << j << ": " << sum << std::endl;
}
}
输入:
2 2 3
3 4 5
4 5 5
输出:
1, 0, 0: 2
1, 0, 1: 2
1, 0, 2: 3
1, 1, 0: 3
1, 1, 1: 4
1, 1, 2: 5
1, 2, 0: 4
1, 2, 1: 5
1, 2, 2: 5
2, 0, 0: 11
2, 0, 1: 14
2, 1, 0: 16
2, 1, 1: 19
3, 0, 0: 33
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- C++在数学计算中将double转换为int
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 最小的CMake构建为Android
- 将"-01"替换为"-02" 英特尔编译器选项会导致 FPE 在较小的 for 循环行程计数中抛出
- 当我的 if 条件计算结果为 false 时,我的 else 块将不会执行
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 在向量中查找大于 0(或通常为 k)的最小元素的最佳方法是什么?
- 为什么组合的上限和下限比较的计算结果总是为 true?
- 如何将我的小程序转换为用于项目的函数?
- 将一个小的 C 定义重写为"normal" C++函数
- Qt:无法直接为带有子项的小部件添加滚动条
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- 搜索一组点,其长度总和最小为矩形.算法是什么
- 如何计算将数组中的所有n个数转换为m的最小成本
- 计算各种数字中的最小值倍数,并将其打印为prime
- 尝试计算 2D 数组中的特定字符,但改为计算整个数组
- 为计算nCr值(C++)而编写的程序
- 在小端计算机上添加两个大端值