打印一个回形矩阵如下
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
#include <stdio.h>
//当n=4时,分别打印1-3, 4-6, 7-9, 10-12, 每次打印(n-1)个数,第一圈打完后打第二圈
//n为奇数时,可刚好打完;n为偶数时剩最后一个数
int a[10][10]; //最大支持边长10的矩阵,其他情况可用动态申请
int sum;
void layer(int x,int y,int n,int startnum)
{
int i;
for(i = 0; i < n-1; i++)
{
a[x][y] = startnum++;
y++;
}
for(i = 0; i < n-1; i++)
{
a[x][y] = startnum++;
x++;
}
for(i = 0; i < n-1; i++)
{
a[x][y] = startnum++;
y--;
}
for(i = 0; i < n-1;i++)
{
a[x][y] = startnum++;
x--;
}
x++;
y++;
if (startnum > sum) //n为奇
return;
if(startnum == sum) //n为偶
{
a[x][y] = sum;
return;
}
layer(x, y, n - 2, startnum);
}
void main()
{
int x = 0;
int y = 0;
int n;
int i,j;
printf("please input the value of n:\n");
scanf("%d", &n);
sum = n * n;
layer(x, y, n, 1);
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
int ttt = 0;
}