我只是用x,y数组来记录位置,为什么要把数组开比较大才能过?新手求助
查看原帖
我只是用x,y数组来记录位置,为什么要把数组开比较大才能过?新手求助
282391
123q楼主2020/5/6 19:56
#include<stdio.h>
int n,i,k,j,x[10100],y[10100],a[1000][1000];
int main(){
	scanf("%d",&n);
	x[1]=1;y[1]=n/2+1;a[1][y[1]]=1; 
	for(i=2;i<=n*n;i++){
		if(x[i-1]==1&&y[i-1]!=n){
			a[n][y[i-1]+1]=i;
			x[i]=n;y[i]=y[i-1]+1;
		}
		else if(x[i-1]!=1&&y[i-1]==n){
			a[x[i-1]-1][1]=i;
			x[i]=x[i-1]-1;
			y[i]=1; 
		}
		else if(x[i-1]==1&&y[i-1]==n){
			a[2][n]=i;
			x[i]=2;
			y[i]=n;
		}
		else if(x[i-1]!=1&&y[i-1]!=n){
			if(!a[x[i-1]-1][y[i-1]+1]){
				a[x[i-1]-1][y[i-1]+1]=i;
				x[i]=x[i-1]-1;
				y[i]=y[i-1]+1;
			 }
			
			else {
				a[x[i-1]+1][y[i-1]]=i;
				x[i]=x[i-1]+1;
				y[i]=y[i-1];
			 }
			
		}
	}
	for(i=1;i<=n;i++)
	{
	    for(j=1;j<=n;j++)
	    printf("%d ",a[i][j]);
		printf("\n");
	}
return 0;
} 

这个是对的,但之前因为数组开的都比较小,所以试了几次看题解才过

2020/5/6 19:56
加载中...