社区讨论
我只是用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 条回复,欢迎继续交流。
正在加载回复...