Main.c: In function ‘main’:
Main.c:15:5: error: variable-sized object may not be initialized
int a[t][t]= {0};
^~~
Main.c:15:19: warning: excess elements in array initializer
int a[t][t]= {0};
^
Main.c:15:19: note: (near initialization for ‘a[0]’)
Main.c:15:5: warning: excess elements in array initializer
int a[t][t]= {0};
^~~
Main.c:15:5: note: (near initialization for ‘a’)
#include<stdio.h>
#include<math.h>
int main()
{
int n,x,y,oldx=0,oldy,s,t;
scanf("%d",&n);
t=sqrt(n);
int a[t][t]= {0};
oldy=(t-1)/2;
a[oldx][oldy]=1;
for(s=2; s<=n; s++)
{ x=oldx-1;
y=oldy+1;
if(x<0) x=t-1;
if(y>=t) y=0;
if(a[x][y]!=0) x=oldx+1,y=oldy;
a[x][y]=s;
oldx=x;
oldy=y;
}
for(int i=0; i<t; i++)
{ for(int j=0; j<t; j++)
printf("%d\t",a[i][j]);
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n,x,y,oldx=0,oldy,s,t;
int **a;
int i;
scanf("%d",&n);
t=sqrt(n);
//下面的内存申请用的是 n 不是 t
a=( int **) malloc( sizeof(int*) * n );
for(i=0;i<n;i++)
{
a[i]=( int *) malloc( sizeof(int) * n );
memset(a[i],0,sizeof(int) * n);
}
oldy=(t-1)/2;
a[oldx][oldy]=1;
for(s=2; s<=n; s++)
{
x=oldx-1;
y=oldy+1;
if(x<0) x=t-1;
if(y>=t) y=0;
if(a[x][y]!=0) x=oldx+1,y=oldy;
a[x][y]=s;
oldx=x;
oldy=y;
}
for(int i=0; i<t; i++)
{
for(int j=0; j<t; j++) printf("%d\t",a[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
{
free(a[i]);
}
free(*a);
return 0;
}
把代码贴出来看看呀
int a[t][t]= {0};
t 不能是变量
比如可以用一个较大的数先声明
int a[100][100]= {0};
后面再用,但是要保证不要越界