博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蛇形填数
阅读量:5148 次
发布时间:2019-06-13

本文共 2234 字,大约阅读时间需要 7 分钟。

问题描述:

在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   314 15  7     6     5    4  16 17  上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n≤8。18 19  */20 21 public class snakeFilled {22 23     /**24      * @param args25      */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         // 先填第一个空格,数字为137         // 填写的数字ptNum:1->n*n38         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                 // 向下填充++ptNum45                 myArray[++x][y] = ++ptNum;46             }47             // 当向上移动时,不出现出界或者格子已经填充过数位置48             // 判断是否可以上移49             while (x - 1 >= 0 && (myArray[x - 1][y] == 0)) {50                 // 向上填充++ptNum51                 myArray[--x][y] = ++ptNum;52             }53             // 当向左移动时,不出现出界或者格子已经填充过数位置54             // 判断是否可以左移55             while (y - 1 >= 0 && (myArray[x][y - 1] == 0)) {56                 // 向左填充++ptNum57                 myArray[x][--y] = ++ptNum;58             }59             // 当向右移动时,不出现出界或者格子已经填充过数位置60             // 判断是否可以右移61             while (y + 1 < n && (myArray[x][y + 1] == 0)) {62                 // 向右填充++ptNum63                 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

 

转载于:https://www.cnblogs.com/ysw-go/p/5869854.html

你可能感兴趣的文章
Nuget:Newtonsoft.Json
查看>>
Hdu - 1002 - A + B Problem II
查看>>
Android设置Gmail邮箱
查看>>
js编写时间选择框
查看>>
JIRA
查看>>
小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
查看>>
深浅拷贝(十四)
查看>>
HDU 6370(并查集)
查看>>
BZOJ 1207(dp)
查看>>
PE知识复习之PE的导入表
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
Attributes.Add用途与用法
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
kubernetes_book
查看>>