【发布时间】:2016-10-26 05:28:00
【问题描述】:
我在hackerearth 上阅读了一个问题,它要求我们打印螺旋矩阵NN 的两条对角线的总和,其中N 作为输入。 a[0][0]=NN 的螺旋矩阵 以 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;
}
【问题讨论】:
-
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。
-
欢迎来到 Stack Overflow!听起来您可能需要学习如何使用调试器来逐步执行代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programs.
-
使用
malloc代替 VLA。 -
@BLUEPIXY 可以如何显示
-
long long (*a)[n] = malloc(sizeof(long long [n][n]));而不是。
标签: c algorithm matrix runtime-error spiral