#include<stdio.h>
#define n 8
int main(void)
{
int N = 1, i, j, shift = 0, Dshift = 0;
int a[n][n];
while(N < (n*n))
{
for(i = 0; i < n - 1 - Dshift; i++)
{
a[0 + shift][i + shift] = N++;
}
for(i = 0; i < n - 1 - Dshift; i++)
{
a[i + shift][n - 1 - shift] = N++;
}
for(i = n - 1 - shift; i > 0 + shift; i--)
{
a[n - 1 - shift][i] = N++;
}
for(i = n - 1 - shift; i > 0 + shift; i--)
{
a[i][0 + shift] = N++;
}
shift++;
Dshift += 2;
}
if(n%2 != 0) //n为单数时,会漏掉最中间一个数,补全
a[shift][shift] = N;
printf("N = %d, shift = %d, Dshift = %d\n", N, shift, Dshift);
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
printf("%4d", a[i][j]);
printf("\n");
}
return 0;
}
#define n 8
int main(void)
{
int N = 1, i, j, shift = 0, Dshift = 0;
int a[n][n];
while(N < (n*n))
{
for(i = 0; i < n - 1 - Dshift; i++)
{
a[0 + shift][i + shift] = N++;
}
for(i = 0; i < n - 1 - Dshift; i++)
{
a[i + shift][n - 1 - shift] = N++;
}
for(i = n - 1 - shift; i > 0 + shift; i--)
{
a[n - 1 - shift][i] = N++;
}
for(i = n - 1 - shift; i > 0 + shift; i--)
{
a[i][0 + shift] = N++;
}
shift++;
Dshift += 2;
}
if(n%2 != 0) //n为单数时,会漏掉最中间一个数,补全
a[shift][shift] = N;
printf("N = %d, shift = %d, Dshift = %d\n", N, shift, Dshift);
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
printf("%4d", a[i][j]);
printf("\n");
}
return 0;
}