解题思路
1.模仿‘回’字逆时针写法
2.每输出完‘口’,算作一圈,然后递归即可
#include<stdio.h>
int a[200][200];
int cnt = 0;//打印的圈数
int count = 0;//已打印数字的个数
int sum;//需要打印的总个数
void fact(int m, int n)
{
int i = 0, j = 0;
j = cnt + j;
if (count == sum)
return;
for (i = cnt; i < m; i++)
{
printf("%d ", a[i][j]);
count++;
}
i = i - 1;
for (j = j + 1; j < n; j++)
{
printf("%d ", a[i][j]);
count++;
}
j = j - 1;
if (count == sum)//以免m=1或者n=1继续输出;
return;
for (i = i - 1; i >= cnt; i--)
{
printf("%d ", a[i][j]);
count++;
}
i = i + 1;
cnt++;
for (j = j - 1; j >= cnt; j--)
{
printf("%d ", a[i][j]);
count++;
}
return fact(m - 1, n - 1);
}
int main()
{
int m, n;
int i, j;
scanf("%d%d", &m, &n);
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
scanf("%d", &a[i][j]);
sum = m * n;
fact(m, n);
return 0;
}