Z字形编排数组

题目:Z字形编排

《Z字形编排数组》

思路:

想象一根45度角的斜线,如下图,从左上角往右下角扫描,第一次将0串起来,第二次将1,2串起来,第三次将3,4,5串起来,以此类推。

《Z字形编排数组》

接下来寻找每根线条与串联的元素的个数的关系,以及每个元素所在坐标变化范围之间的关系。

根据上图,找规律:

第一根线,坐标范围是0-0,只有一个元素,[0][0]

第二根线,坐标范围是0-1;有2个元素,[0][1]    [1][0] 

第三根线,坐标范围是0-2;有三个元素,[0][2]    [1][1]  [2][0]

……

由此可见,每条线和元素在坐标中的位置范围的关系。

0,0	0,1	0,2	0,3	0,4	0,5	0,6	0,7	
1,0	1,1	1,2	1,3	1,4	1,5	1,6	1,7	
2,0	2,1	2,2	2,3	2,4	2,5	2,6	2,7	
3,0	3,1	3,2	3,3	3,4	3,5	3,6	3,7	
4,0	4,1	4,2	4,3	4,4	4,5	4,6	4,7	
5,0	5,1	5,2	5,3	5,4	5,5	5,6	5,7	
6,0	6,1	6,2	6,3	6,4	6,5	6,6	6,7	
7,0	7,1	7,2	7,3	7,4	7,5	7,6	7,7

假设y坐标是表示行的,x坐标是表示列。

每条线上的坐标的取值范围,规律如下:

y从0到当前线条根数,x坐标从当前线条根数到0,比如:[0][2]    [1][1]  [2][0]   2就是当前线条根数;

上面只能算出一半,即:左上角的一半三角形。

接下来就要思考右下角的坐标变化范围了。

右下角的坐标取值范围规律如下:

第9条:1-7;

第10条:2-7

以此类推。。。。

由此可见,右下角规律如下:

x坐标 从 1-7 (7就是数组宽度减去1)

y坐标 就是 当前线条数 超出 数组宽度-1 的值  也就是  当前线条的根数 –  (数组宽度-1)

最后还是看代码实现:java的,其他语言类似:

import java.util.Scanner;

public class test {
	@SuppressWarnings("resource")
	public static void main(String[] args) {

		
		
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个数字:");
		int width = sc.nextInt();
		
		for(int y=0; y<width; y++) {
			for (int x=0; x<width; x++) {
				System.out.print(y+","+x+"\t");
			}
			System.out.println();
		}
		
		int[][] nums = new int[width][width];
		int n = 0;
		
		for (int i = 0; i < (width - 1) * 2 + 1; i++) {
			int x = -1, y = -1;

			for (int j = (i < (width - 1) ? 0 : i - (width-1)); j <= (i > (width - 1) ? width-1 : i); j++) {
				if (i % 2 == 0) {
					y = j;
					x = i - j;
				} else {
					y = j;
					x = i - j;
				}

				nums[y][x] = n;
				++n;
			}
		}

		for (int y = 0; y < width; y++) {
			for (int x = 0; x < width; x++) {
				System.out.print(nums[y][x] + "\t");
			}
			System.out.println();
		}
	}

}

运行效果:

《Z字形编排数组》

《Z字形编排数组》

    原文作者:Z字形编排问题
    原文地址: https://blog.csdn.net/liu_rong_fei/article/details/51296421
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞