三角螺旋矩阵

打印如下矩阵,如果 n=7 则输出:


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

 

注意观察可知,数字增加的方向及走过的步数是有规律的:

 

1 斜下 7
2 向左 6
3 向上 5
4 斜下 4
5 向左 3
6 向上 2
7 斜下 1

 

所以可以设定的一个变量 direction 记录方向的变化,循环变化。

同时根据 direction 的不同,来决定每次的递增位置。

 

代码如下:

public class Sanjiao {
	public static void main(String[] args) {
		int n = 7;
		int num[][] = new int[n][n];
		int index = 0;//数值
		int row = -1;// 行
		int cel = -1;// 列
		for (int i = n; i > 0; i--) {
			int direction = i % 3;//方向
			for (int k = i; k > 0; k--) {
				// 0向左 1斜着 2向上
				switch (direction ) {
				case 1: {
					num[++cel][++row] = ++index;
					break;
				}
				case 2: {
					num[--cel][row] = ++index;
					break;
				}
				case 0: {
					num[cel][--row] = ++index;
					break;
				}
				}
			}
		}
		//结果输入
		for (int i = 0; i < num.length; i++) {
			for (int k = 0; k < num[0].length; k++) {
				if (num[i][k] != 0) {
					if (num[i][k] > 9)
						System.out.print(num[i][k] + " ");
					else
						System.out.print(num[i][k] + "  ");

				}
			}
			System.out.println();
		}
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值