浏览 3122 次
锁定老帖子 主题:java与旋转二维数组
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-13
/** * 输入一个数,要求打出其旋转二维数组,如: 输入3 结果为: 1 8 7 2 9 6 3 4 5 * * 输入4 结果为: 1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7 * * @author Cuiran * @date 2008-11-5 10:22 * */ public class Array2D { /** * @param args */ public static void getErWer() { int myInt[][] = new int[5][10]; // 遍历。给数组中的每一个数组赋值 for (int i = 0; i < myInt.length; i++) { for (int j = 0; j < myInt[0].length; j++) { myInt[i][j] = i * j; } } System.out.println("myInt.length=" + myInt.length + ", myInt[0].length=" + myInt[0].length); // 输出数组每一维的下限和上限 for (int i = 0; i < myInt.length; i++) { for (int j = 0; j < myInt[0].length; j++) { System.out .println("myInt[" + i + "][" + j + "]=" + myInt[i][j]); } } } /** * 典型的蛇形矩阵刚学JAVA, 还不会使用二维数组,用一维数组模拟的 改变n就可以生成不同大小的矩阵 输入一个数 * * @param args */ public static void getSnake(int n) { int layer = 0;// 圈数有外向内 int i = 0, j = 0;// 起始位置 int direct = 1;// 初始方向,0,1,2,3---上下左右 int a[] = new int[n * n]; for (int num = 1; num <= n * n; num++) { a[i * n + j] = num; // 向direct指定的方向移动,遇边转向 switch (direct) { case 1:// 下 if (++i >= n - 1 - layer) { i = n - 1 - layer; direct = 3;// 转右 } break; case 3:// 右 if (++j >= n - 1 - layer) { j = n - 1 - layer; direct = 0;// 转上 } break; case 0:// 上 if (--i <= layer) { i = layer; direct = 2;// 转左 } break; case 2:// 左 if (--j <= layer + 1) { j = layer + 1; direct = 1;// 转下 layer++;// 圈数加1 } break; default: break; } } for (i = 0; i < n; ++i) { for (j = 0; j < n; ++j) { System.out.print(a[i * n + j] + "\t"); } System.out.println(); } } public static void print(long startNo, int r, int c, int n) { long reslt; if (c == 0) { System.out.print(startNo + r + "\t"); } else if (c == n - 1) { System.out.print(startNo + 3 * (n - 1) - r + "\t"); } else if (r == n - 1) { System.out.print(startNo + r + c + "\t"); } else if (r == 0) { System.out.print(startNo + 4 * (n - 1) - c + "\t"); } else { startNo += n * n - (n - 2) * (n - 2); print(startNo, r - 1, c - 1, n - 2); } } /** * 不用数组写了一个,比较灵活,就是运行起来慢一点。 * */ public static void getSnake2() { int n = 10; long startNo = 1; long timeStart = System.currentTimeMillis(); for (int r = 0; r < n; r++) { for (int c = 0; c < n; c++) { print(startNo, r, c, n); } System.out.println(); } long timeEnd = System.currentTimeMillis(); System.out.println("Total Time:" + (timeEnd - timeStart)); } public static void main(String[] args) { // getSnake(4); getSnake2(); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |