求助(程序只输出零)c++

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

```cpp for(int j=1;j<=m;j++){ for(int k=1;k<=m;k++){ cout<<n[k][x]<<" "; } cout<<endl; } ``` $x$ 在循环中是不变的。
by yuchenren @ 2022-04-17 10:06:29


你这里错的有点多欸QWQ 正确的[AC code:](https://www.luogu.com.cn/record/74092603) ```cpp #include<iostream> using namespace std; int main() { int n[50][50]={},m,a=0,b=2;//wrong1 cin>>m; int x=1,y=m/2+1; n[x][y]=1; for(int i=2;i<=m*m;i++){ if(x==1&&y!=m){//wrong2 n[m][y+1]=b; x=m; y=y+1; } else if(y==m&&x!=1){ n[x-1][1]=b;//wrong3 x=x-1;//wrong4 y=1; } else if(x==1&&y==m){ n[x+1][y]=b; x=x+1; } else if(x!=1&&y!=m){ if(n[x-1][y+1]==0){//wrong5 n[x-1][y+1]=b;//wrong6 x=x-1;//wrong7 y=y+1; } else{ n[x+1][y]=b;//wrong8 x=x+1;//wrong9 } } b++; } for(int j=1;j<=m;j++){ for(int k=1;k<=m;k++){ cout<<n[j][k]<<" ";//wrong10 } cout<<endl; } return 0; } ``` 自己对照一下,待会告诉原因^v^。
by coldy_rainy @ 2022-04-17 10:43:29


@[feng_nuoyiman](/user/702449)
by coldy_rainy @ 2022-04-17 10:43:56


@[feng_nuoyiman](/user/702449) ## wrong 1: **错误**代码:```n[50][50]``` **正确**代码:```n[50][50]={}``` **错因**:数组没初始化,会出现一些乱七八糟的数进去。 **改正建议**:像我一样初始化。 ## wrong 2: **错误**代码:```x==1&&y!=1``` **正确**代码:```x==1&&y!=m``` **错因**: 题目描述: --- 若 ( $ K $ $ -1$ ) 在第一行但不在**最后一列**,则将 $K$ 填在最后一行, ( $ K $ $ -1$ ) 所在列的右一列; --- 而你的 ```y```设定错误,违反了题目描述。 **改正建议**:如正确代码。 ## wrong 3: **错误**代码:```n[x+1][1]``` **正确**代码:```n[x-1][1]``` **错因**: 题目描述: --- 若 ( $ K $ $ -1 $ ) 在最后一列但不在第一行,则将 $ K $ 填在第一列, ($ K$ $ -1$) 所在行的**上一行**; --- 向**上**, ```x```应该 $-1$ ,而你的```x```却是 $+1$。 ## wrong4: 同 $ \bold {wrong 3 } $。
by coldy_rainy @ 2022-04-17 10:59:56


@[feng_nuoyiman](/user/702449) ## wrong5: **错误**代码:```n[x+1][y+1]``` **正确**代码:```n[x-1][y+1]``` **错因**: 题目描述: --- 如果 ( $ K $ $ -1$ ) 的右**上**方还未填数,则将 K 填在 ($ K$ $ -1$ ) 的右**上**方; --- 向**上**,```x```应该 $ -1 $ ,而你的代码却是 $+1$。 ## wrong 6 同 $\bold{wrong 5}$。 ## wrong 7: 同 $\bold{wrong 5}$。 ## wrong 8: **错误**代码:```n[x][y+1]=b;``` **正确**代码:```n[x+1][y]=b;``` **错因**: 题目描述: --- 否则将 $K$ 填在 ($K$$-1$) 的**正下方**。 --- 正下方,是 $ x $ $+1$ ,而不是 $ y $ $+1$。 ## wrong 9: 同 $\bold {wrong 8}$。 ## wrong 10: **错误**代码:```cout<<n[k][x]<<" ";``` **正确**代码:```cout<<n[j][k]<<" ";``` **错因**: $ x $ 是个不变量,而 $ j $ 才是横坐标,$ k $ 才是纵坐标。 $ \bold{THE END}$
by coldy_rainy @ 2022-04-17 11:11:26


@[penhaochen](/user/526755) 太感谢了![](https://啧.tk/mg)![](https://啧.tk/mg)
by feng_nuoyiman @ 2022-04-17 11:14:37


@[penhaochen](/user/526755) 发错了,那堆乱码重发一次: wrong 8: **错误**代码:```n[x][y+1]=b;``` **正确**代码:```n[x+1][y]=b;``` **错因**: 题目描述: --- 否则将 $K$ 填在 ($K-1$) 的**正下方**。 --- 正下方,是 $ x +1$ ,而不是 $ y +1$。 ## wrong 9: 同 $\bold {wrong 8}$。 ## wrong 10: **错误**代码:```cout<<n[k][x]<<" ";``` **正确**代码:```cout<<n[j][k]<<" ";``` **错因**: $ x $ 是个不变量,而 $ j $ 才是横坐标,$ k $ 才是纵坐标。 $ \bold{THE END}$
by coldy_rainy @ 2022-04-17 11:15:06


|