按斜线方向S形顺序将1~n²填入n阶方阵

题目描述:输入正整数n,输出n阶方阵,将1~n²按斜线方向S形顺序填入,例如n=5时,输出:

1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25

这是一个n*n的二维数组,斜向的线段共有2n-1条,我们可以按1~2n-1号斜线的顺序进行填入,奇数号与偶数号的填写顺序也是不一样的。同时,对于方阵的上三角部分和下三角部分,奇偶斜线的填入起点也是不一样的,如上三角奇数斜线从第0行填起,下三角奇数斜线从第n-1列填起。

完整代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n,i,j,k,d;  //n为阶数,k为填入的数,d为斜线编号
	scanf("%d", &n);
	int a[100][100];
	for (k = d = 1; d <= 2 * n - 1; d++)
	{
		if (d <= n)     //对于上三角部分
		{
			if (d % 2 == 1)  //奇数号
			{
				for (i = 0, j = d-1; i <= d-1; i++, j--)//从右上往左下填入
					a[i][j] = k++;
			}
			else       //偶数号
			{
				for (i = d-1, j = 0; j <= d-1; i--, j++)//从左下往右上
					a[i][j] = k++;
			}
		}
		else     //对于下三角部分
		{
			if (d % 2 == 0)  //偶数号
			{
				for (i = n - 1, j = d - n; j <= n - 1; i--, j++)
					a[i][j] = k++;
			}
			else      //奇数号
			{
				for (i = d - n, j = n - 1; i <= n - 1; i++, j--)
					a[i][j] = k++;
			}
		}
	}
	for (i = 0; i <= n - 1; i++)
		for (j = 0; j <= n - 1; j++)
		{
			printf("%d ", a[i][j]);
			if (j == n - 1)
				printf("\n");
		}
	return 0;
}

输入 7

输出:

1 3 4 10 11 21 22
2 5 9 12 20 23 34
6 8 13 19 24 33 35
7 14 18 25 32 36 43
15 17 26 31 37 42 44
16 27 30 38 41 45 48
28 29 39 40 46 47 49

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值