zoukankan      html  css  js  c++  java
  • 蛇形填数

    问题描述:

    在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  
  • 相关阅读:
    区分nil Nil NULL和NSNill(Objective C语言)(转)
    iOS 中DLog 用法
    web开发中因为导包顺序不同而出错
    用java程序复制UTF-8文件后开头出现?号
    java使用dom4j解析xml
    Json的解析与封装
    java读取properties配置文件
    关于代码注释的一些问题
    当没有给字符串留''的位置的后果
    service()和doGet()和doPost()
  • 原文地址:https://www.cnblogs.com/ysw-go/p/5869854.html
Copyright © 2011-2022 走看看