社区讨论

我只是用x,y数组来记录位置,为什么要把数组开比较大才能过?新手求助

P2615[NOIP 2015 提高组] 神奇的幻方参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lodv92b6
此快照首次捕获于
2023/10/31 13:06
2 年前
此快照最后确认于
2023/11/07 03:00
2 年前
查看原帖
CPP
#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;
} 
这个是对的,但之前因为数组开的都比较小,所以试了几次看题解才过

回复

2 条回复,欢迎继续交流。

正在加载回复...