同样的代码放在不同的区,结果就不对
查看原帖
同样的代码放在不同的区,结果就不对
792820
jackpudding楼主2022/12/14 20:56

对于下面的代码,我将第三行声明放到main()里面,输出就会是错的。 用vs,当输入3时会出现很长的数字;输入25是会崩溃; 用devc++,当输入3时正确输出;输入25是超时直接返回了。 这是什么原因呢?

#include <iostream>
using namespace std;
int N, n, m, arr[40][40];
int main() {
	cin >> N;
	//最初n代表数字1的行,m代表初始1的列
	//不需要知道每一个数字所在的坐标,只需要知道上一个数字所在坐标即可。一直递推到数字1,而数字1的坐标已知
	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;
}
2022/12/14 20:56
加载中...