蛇形填数
2016-05-07 18:36
288 查看
问题:
在n*n方阵里填入1,2,....,n*n,要求填成蛇形。例如,n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
分析:
从1开始填写,设“笔”的坐标为(x,y),则一开始x=0,y=n-1。
“笔”的移动轨迹是:下......,左.......,上.......,右.....。
如此循环........
在n*n方阵里填入1,2,....,n*n,要求填成蛇形。例如,n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
分析:
从1开始填写,设“笔”的坐标为(x,y),则一开始x=0,y=n-1。
“笔”的移动轨迹是:下......,左.......,上.......,右.....。
如此循环........
import java.util.Scanner; public class Main { private static Scanner sc; public static void main(String[] args) { sc = new Scanner(System.in); int n = sc.nextInt(); int x = 0; int y = n - 1; int count = 1; int[][] a = new int ; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { a[i][j] = 0; } } a[0][n - 1] = 1; while (count < n * n) { while (x + 1 < n && a[x + 1][y] == 0) { a[++x][y] = ++count; } while (y - 1 >= 0 && a[x][y - 1] == 0) { a[x][--y] = ++count; } while (x - 1 >= 0 && a[x - 1][y] == 0) { a[--x][y] = ++count; } while (y + 1 < n && a[x][y + 1] == 0) { a[x][++y] = ++count; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.printf("%5d", a[i][j]); } System.out.println(); } } }
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析