蛇形矩阵c/c++

描述:

给定一个整数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;
}

结果如下:

 具体实现过程:

如有更好方法欢迎传授,蟹蟹! 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值