【深基5.习6】蛇形方阵
题目描述
给出一个不大于
9
9
9 的正整数
n
n
n,输出
n
×
n
n\times n
n×n
的蛇形方阵。
从左上角填上 1 1 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 3 3 个字符,前面使用空格补齐。
输入格式
输入一个正整数 n n n,含义如题所述。
输出格式
输出符合题目要求的蛇形矩阵。
样例 #1
样例输入 #1
4
样例输出 #1
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
提示
数据保证, 1 ≤ n ≤ 9 1 \leq n \leq 9 1≤n≤9。
思路:
主要问题是怎么转。其实每次转都相当于是往右转,所以只需要定义一个改变位置的数组,还有一个变量记录现在头朝哪边,每次转改变一下就行了。注意不能直接改,需要 %4。
#include<stdio.h>
int main(void)
{
int n;
int s[10][10]={0}; //定义100个元素的二维数组,超过题干给出的最大9^2=81
scanf("%d",&n);
int m,k,i,j;
int cnt=1;
for(m=0,k=n-1;m<=k;m++,k--) //m<=k使 程序进行循环的次数恰好填满n^2
{
for(i=m,j=m;j<=k;j++) //向右填数
{
s[i][j]=cnt++;
}
for(i=m+1,j=k;i<=k;i++) //向下填数
{
s[i][j]=cnt++;
}
for(i=k,j=k-1;j>=m;j--) //向左填数
{
s[i][j]=cnt++;
}
for(i=k-1,j=m;i>=m+1;i--) //向上填数
{
s[i][j]=cnt++;
}
}
for(i=0;i<n;i++) //输出二维数组
{
for(j=0;j<n;j++)
{
printf("%3d",s[i][j]);
}
printf("\n");
}
return 0;
}