描述:
给定一个整数n,输出n*n的蛇形矩阵
输入描述:
输入一行,包含一个整数n
输出描述:
输出n行,每行包含n个正整数,通过空格分隔
1<=n<=1000;
输入:4 输出: 1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16 |
可以用填充的方法实现:全部的数有2n-1个,每次走完一个填充的数字就少一个,分为奇数列和偶数列(每次奇数列从第一列开始就为(趟数-1,0),每次偶数列在第一行开始就为(0,趟数-1)
直到填充完n*n的矩阵。
具体代码实现如下:
#include<stdio.h>
int main()
{
int i, j, k, x, y, a[10][10], n, dir;
int v = 0; //每个数的值
scanf("%d", &n);
for (i = 0; i <= 2 * n - 1; i++) //需要填充的所有数
{
//计算起始坐标
if (i % 2 == 1) //奇数趟
{
x = i - 1;
y = 0;
dir = -1; //确定向为负,此处设计很巧妙
}
else
{
x = 0;
y = i - 1;
dir = 1;//偶数趟方向为正
}
while (x >= 0 && y >= 0)//给定条件,丢掉多余数字
{
if (x < n && y < n)//同样丢掉多余的部分
{
v++;
a[x][y] = v;
}
x += dir;
y -= dir;//控制打印的坐标,即改变打印的方向
}
}
for (i = 0; i < n; i++) //开始打印
{
for (j = 0; j < n; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
结果如下:
具体实现过程:
如有更好方法欢迎传授,蟹蟹!