A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© #→_→ 中级黑马   /  2015-8-14 14:51  /  530 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 #→_→ 于 2015-9-13 21:30 编辑

public static void main(String[] args) {
                int size = 19;// 定义一个长度

                // 不需要排列的长度
                if (size <= 0) {
                        System.exit(0);
                } else if (size == 1) {
                        System.out.println(1);
                        System.exit(0);
                }

                int x = 1, y = 1;// 定义初始的行列
                // 总共需要占用的 行列 x y
                while (true) {
                        if (x * y >= size) {
                                break;
                        } else {
                                x++;
                        }
                        while (true) {
                                if (x * y >= size) {
                                        break;
                                } else {
                                        y++;
                                }
                                break;
                        }
                }
                // 定义一个二维数组
                int[][] spiral = new int[y][x];

                int w = 0, l = 0; // 初始化坐标

                // 根据长宽设置坐标
                if (x % 2 == 0) {
                        w = x / 2 - 1;
                } else {
                        w = (x + 1) / 2 - 1;
                }

                if (y % 2 == 0) {
                        l = y / 2 - 1;
                } else {
                        l = (y + 1) / 2 - 1;
                }

                spiral[l][w] = 1;// 初始化坐标和数字
                int len = 2;// 等待被写入的数字

                // 模拟螺旋写入
                for (int n = 1; len <= size; n++) {
                        if (n % 2 != 0) {
                                for (int le = 1; len <= size; le++) {
                                        if (le <= n) {
                                                w++;
                                                spiral[l][w] = len++;
                                        } else {
                                                break;
                                        }
                                }
                                for (int le = 1; len <= size; le++) {
                                        if (le <= n) {
                                                l++;
                                                spiral[l][w] = len++;
                                        } else {
                                                break;
                                        }
                                }
                        } else {
                                for (int le = 1; len <= size; le++) {
                                        if (le <= n) {
                                                w--;
                                                spiral[l][w] = len++;
                                        } else {
                                                break;
                                        }
                                }
                                for (int le = 1; len <= size; le++) {
                                        if (le <= n) {
                                                l--;
                                                spiral[l][w] = len++;
                                        } else {
                                                break;
                                        }
                                }
                        }
                }
                // 打印数组
                for (int i = 0; i < spiral.length; i++) {
                        int[] arr = spiral;
                        for (int t = 0; t < arr.length; t++) {
                                System.out.print(arr[t] + "\t");
                        }
                        System.out.println();
                }
        }

2 个回复

倒序浏览
本帖最后由 #→_→ 于 2015-9-13 21:35 编辑

大家都是从外到内的,我来个从内到外的
回复 使用道具 举报


不过还是有问题,把空字符代替数字0的话,格式就有问题了, 不美观,
每行结束之后然后换行会好看点,不过多出的数字依然是会差一行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马