对于下面的代码,我将第三行声明放到main()里面,输出就会是错的。
用vs,当输入3时会出现很长的数字;输入25是会崩溃;
用devc++,当输入3时正确输出;输入25是超时直接返回了。
这是什么原因呢?
#include <iostream>
using namespace std;
int N, n, m, arr[40][40];
int main() {
cin >> N;
arr[0][N / 2] = 1, n = 0, m = N / 2;
for (int i = 2; i <= N * N; i++) {
if (n == 0 && m != N - 1) arr[N - 1][m + 1] = i, n = N - 1, m++;
else if (m == N - 1 && n != 0) arr[n - 1][0] = i, n--, m = 0;
else if (n == 0 && m == N - 1)arr[n + 1][m] = i, n++;
else if (n != 0 && m != N - 1) {
if (arr[n - 1][m + 1] == 0 && n - 1 >= 0 && m + 1 <= N)arr[n - 1][m + 1] = i, n--, m++;
else arr[n + 1][m] = i, n++;
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
return 0;
}