|
发表于 2023-11-9 14:56:08
|
显示全部楼层
在这段代码中,问题出在了计算 res 的地方。在这里,你使用了逗号运算符 , 来计算 res 的值,但是逗号运算符只会返回最后一个表达式的值,而不是所有表达式的和。所以,你需要修改这行代码。
将这行代码修改为以下形式:
- res = max(a[ i][j] - a[i-c][j] - a[ i][j-c] + a[i-c][j-c], res);
复制代码
这样, res 的值将会被正确地更新为当前子矩阵的和与之前的结果中的较大值。
另外,还有一个小问题是,你在输出 x 和 y 的时候,应该在循环结束后输出,而不是在循环内部输出。所以,将 cout<<x<<" "<<y<<endl; 移到最外层循环结束后即可。
修改后的代码如下:
- #include<bits/stdc++.h>
- using namespace std;
- const int N=1e3+10;
- int a[N][N];
- int n,m,c;
- int main()
- {
- cin>>n>>m>>c;
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=m;j++)
- {
- cin>>a[ i][j];
- a[ i][j]=a[i-1][j]+a[ i][j-1]-a[i-1][j-1];
- }
- }
- int res=0,x,y;
- bool flag=false;
- for(int i=c;i<=n;i++)
- {
- for(int j=c;j<=m;j++)
- {
- res = max(a[ i][j] - a[i-c][j] - a[ i][j-c] + a[i-c][j-c], res);
- x=i-c;
- y=j-c;
- }
- }
-
- cout<<x<<" "<<y<<endl;
- }
复制代码
希望这能帮助到你! |
|