我在hackerearth 上阅读了一个问题,它要求我们打印螺旋矩阵 N N 的两条对角线的总和,其中 N 作为输入。a[0][0]=N N 的螺旋矩阵,中心为 1,即
16 15 14 13
5 4 3 12
6 1 2 11
7 8 9 10
我已经为此实现了代码,但是当输入 N >= 10^5 时会出现分段或运行时错误
我无法弄清楚发生了什么
#include <stdio.h>
int main(void) {
long long int n,test;
scanf("%lld",&test);
while(test--){
scanf("%lld",&n);
long long int p=n*n;
long long int r1=0,r2=n-1,c1=0,c2=n-1,i,j;
long long int a[n][n];
while(p>=1)
{
for(i=c1;i<=c2;i++)
{
a[r1][i]=p--;
}
for(j=r1+1;j<=r2;j++)
{
a[j][c2]=p--;
}
for(i=c2-1;i>=c1;i--)
{
a[r2][i]=p--;
}
for(j=r2-1;j>=r1+1;j--)
{
a[j][c1]=p--;
}
c1++;
c2--;
r1++;
r2--;
}
long long int sum=0;
for ( i = 0, j =0; i< n && j < n; i++, j++) {
sum = sum + a[i][j];
}
for ( i=0,j=n-1 ; i<n && j>=0 ; i++, j--) {
sum= sum + a[i][j];
}
printf("%lld\n",sum%1000000009);
}
return 0;
}