在一个NN格的棋盘中,有2N-1条从左上角到右下角的斜线,如下图:
由上图我们会发现,每个单元格只且只有一条从左上到右下的斜线经过它。
已知这个N*N的棋盘中,每个格子中都放有一个整数。求某个单元格所在的斜线上所有单元格数值的和。
例如:
例如:第2行第3列的单元格所在的斜线经过了第1行第2列,第2行第3列,和第3行第4列。所以这条斜线所经过的所有单元格数值的和为2+4+9=15。
输入
输入数据有多行。
第一行为一个整数N(2<=N<=100)。表示棋盘的大小。
接下来有N行,每行N个整数,共N*N个整数,表示棋盘中每个格子中的数值,所有数据都小于1000。
最后还有一行,有两个整数x,y(2<=x,y<=100),表示棋盘中第x行,第y列的位置。
输出
一个整数,求第x行,第y列单元格所在斜线上所有单元格数值的和。
样例输入 Copy
4
3 2 2 7
2 4 4 8
5 8 6 9
7 0 4 5
2 3
样例输出 Copy
15
错误代码:
#include<bits/stdc++.h>
#define MX 1000
using namespace std;
int a[MX + 10][MX + 10];
int main()
{
int n,i,j,ans = 0;
int x,y;
cin >> n;
for (i = 1;i <= n;i++)
{
for (j = 1;j <= n;j++)
{
cin >> a[i][j];
}
}
cin >> x >> y;
int p = x - y + 1,q = 1;
for (i = p,j = q;i,j <= n;i++,j++)
{
ans += a[i][j];
}
cout << ans << endl;
return 0;
}