蛇形填数
Posted 菜鸟奋斗史
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蛇形填数相关的知识,希望对你有一定的参考价值。
问题描述:
在n*n方阵里填入1,2,„,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n≤8。
算法实现:
1 package com.ysw.test; 2 3 import java.util.Scanner; 4 5 /* 6 * 问题描述: 7 * 在n*n方阵里填入1,2,„,n*n,要求填成蛇形。例如n=4时方阵为: 8 9 10 11 12 1 10 11 9 16 13 2 12 13 8 15 14 3 14 15 7 6 5 4 16 17 上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n≤8。 18 19 */ 20 21 public class snakeFilled { 22 23 /** 24 * @param args 25 */ 26 public static void main(String[] args) { 27 28 int n; 29 // 定义坐标,随着坐标的变化不断填数,起点坐标为(x=0,y=n-1) 30 // 移动的方向:下->下->..->左->左-..>上->上-..>右... 31 int x, y; 32 Scanner reader = new Scanner(System.in); 33 n = reader.nextInt(); 34 int myArray[][] = new int[n][n]; 35 36 // 先填第一个空格,数字为1 37 // 填写的数字ptNum:1->n*n 38 int ptNum = myArray[x = 0][y = n - 1] = 1; 39 // 先判断再移动 40 while (ptNum < n * n) { 41 // 当向下移动时,不出现出界或者格子已经填充过数位置 42 // 判断是否可以下移 43 while (x + 1 < n && (myArray[x + 1][y] == 0)) { 44 // 向下填充++ptNum 45 myArray[++x][y] = ++ptNum; 46 } 47 // 当向上移动时,不出现出界或者格子已经填充过数位置 48 // 判断是否可以上移 49 while (x - 1 >= 0 && (myArray[x - 1][y] == 0)) { 50 // 向上填充++ptNum 51 myArray[--x][y] = ++ptNum; 52 } 53 // 当向左移动时,不出现出界或者格子已经填充过数位置 54 // 判断是否可以左移 55 while (y - 1 >= 0 && (myArray[x][y - 1] == 0)) { 56 // 向左填充++ptNum 57 myArray[x][--y] = ++ptNum; 58 } 59 // 当向右移动时,不出现出界或者格子已经填充过数位置 60 // 判断是否可以右移 61 while (y + 1 < n && (myArray[x][y + 1] == 0)) { 62 // 向右填充++ptNum 63 myArray[x][++y] = ++ptNum; 64 } 65 } 66 // 格式化打印 67 for (x = 0; x < n; x++) { 68 for (y = 0; y < n; y++) { 69 System.out.print(myArray[x][y] + " "); 70 } 71 System.out.println(); 72 } 73 } 74 75 }
测试输入:5
输出:
13 14 15 16 1 12 23 24 17 2 11 22 25 18 3 10 21 20 19 4 9 8 7 6 5
以上是关于蛇形填数的主要内容,如果未能解决你的问题,请参考以下文章