一脸懵,求dalao帮一下~

P2615 [NOIP2015 提高组] 神奇的幻方

咋啦(来自另一位菜鸡的关心)
by 护法夜叉—魈 @ 2021-04-01 20:29:10


啥问题?
by 护法夜叉—魈 @ 2021-04-01 20:30:22


哈,终于看到个入门的啦(逐渐膨胀)
by 护法夜叉—魈 @ 2021-04-01 20:31:53


@[xuyuanchen](/user/439126) 同痣,什么问题
by 护法夜叉—魈 @ 2021-04-01 20:32:26


a开的不够大(80x80应该就够用了) 主要是for用的是i从1到n,j也是,n又被赋值成2n-1,导致程序试图清空a中80x80的区域,但是a没那么大,所以会出bug。
by zhong2010 @ 2021-04-01 21:37:20


(数据范围n<=39,2n+1<=79)
by zhong2010 @ 2021-04-01 21:38:17


@[xuyuanchen](/user/439126) 问题总结: 1.因为 1≤n≤50,所以数组需要开到50 * 50,保守起见,开到 55 * 55。 2.因为lz码风独特,看不出有啥问题~~不想看~~。 Code: ```cpp #include <cstdio> using namespace std; int n; int a[55][55]; int main() { scanf("%d",&n); a[1][n/2+1]=1; int cur=1; int i,j; i=1,j=n/2+1; while(cur<=n*n) { cur++; if(cur>n*n) { break; } if(i==1 && j!=n) { i=n; j++; a[i][j]=cur; } else if(i!=1 && j==n) { j=1; i--; a[i][j]=cur; } else if(i==1 && j==n) { i=2; a[i][j]=cur; } else if(i!=1 && j!=n) { if(a[i-1][j+1]==0) { i--; j++; a[i][j]=cur; } else { i++; a[i][j]=cur; } } } for(register int x=1;x<=n;x++) { for(register int y=1;y<=n;y++) { printf("%d ",a[x][y]); } printf("\n"); } return 0; } ```
by Coros_Trusds @ 2021-04-10 23:12:24


@[Coros_Trusds](/user/430409) dalao谢谢
by xuyuanchen @ 2021-04-24 14:09:14


@[护法夜叉—魈](/user/267572) 错误,得了10分
by xuyuanchen @ 2021-04-24 14:09:49


@[zhong2010](/user/241288) thankyou
by xuyuanchen @ 2021-04-24 14:10:32


|