#include<stdio.h>
#include<math.h>
int N;
int M;
int a[101][101];
void op(int r1, int r2, int c1, int c2)
{
//printf("%d %d %d %d \n", r1, r2, c1, c2);
if (r1 == r2 || c1 == c2)
{
return;
}
int rmid = (r1 + r2)>>1;
int cmid = (c1 + c2)>>1;
int t = rmid - r1 + 1;
//左上
op(r1, rmid, c1, cmid);
//右上
op(r1, rmid, cmid + 1, c2);
for (int i = r1; i <= rmid; i++)
{
for (int j = c1; j <= cmid; j++)
{
a[i + t][j + t] = a[i][j];
}
}
//把右上赋值给左下
for (int i = r1; i <= rmid; i++)
{
for (int j = cmid + 1; j <= c2; j++)
{
a[i + t][j - t] = a[i][j];
}
}
}
int main()
{
scanf_s("%d", &M);
N = pow(2, M);
for (int j = 1; j <= N; j++)
{
a[1][j] = j;
}
op(1, N, 1, N);
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
完整代码如上所示,运行时显示错误代码LNK1168,据说改变堆栈保留大小可以解决问题,已经尝试过了,但仍没有成功,求解答