球球了,这是一个值得深思的小细节

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

下面的是正确的代码
by 爱睡大觉 @ 2021-02-03 21:37:52


这是错误代码 ```c #include<stdio.h> int main() { int fang[40][40] = {0}; int n; scanf("%d", &n); int x = 1, y = (n + 1) / 2; fang[x][y] = 1; int no = n * n; int op = 2; for (int i = 2; i <= no; i++) { if (x == 1 && y != n) { //fang[n][y + 1] = op; ++y ; x = n; ++op; } else if (x != 1 && y == n) { //fang[x - 1][1] = op; y = 1; --x ; ++op; } else if (x == 1 && y == n) { //fang[x + 1][y] = op; ++x ; ++op; } else { if (fang[x - 1][y + 1] == 0) { //fang[x - 1][y + 1] = op, --x ; ++y ; ++op; } else { //fang[x + 1][y] = op, ++x , ++op; } } fang[x][y]=op; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) printf("%d ", fang[i][j]); printf("\n"); } return 0; } ```
by 爱睡大觉 @ 2021-02-03 21:39:07


```cpp int op = 2; ``` 改成 ```cpp int op = 1; ``` 也可以过的,如果op初值是2那你填的第一个数是3,就错了 (这么明显的错误,随便试一下样例都能找出来吧?)
by _caiji_ @ 2021-02-03 21:47:50


@[爱睡大觉](/user/470496) 你这种简便写法也可以的,就注意一下初始值。建议以后代码出错,先本机运行一遍,再对着你写的代码模拟一遍,确定没大问题,再来求助。
by _caiji_ @ 2021-02-03 21:50:22


@[caijianhong](/user/390033) 谢谢谢谢
by 爱睡大觉 @ 2021-02-03 23:21:31


|