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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:                                
1   2   3   4  
12  13  14  5
11  16  15  6
10  9   8   7

11 个回复

正序浏览
利用for循环嵌套,外层循环控制行数,内层循环控制列数。
回复 使用道具 举报
ln0491 中级黑马 2015-10-12 09:46:13
11#
好晕,完全不懂。。。
回复 使用道具 举报
逻辑题有时感觉没用  
回复 使用道具 举报
前来学习~~
回复 使用道具 举报
这个要看规律吗
回复 使用道具 举报
mars314 中级黑马 2015-10-11 22:24:09
7#
public class Test
{
        public static void main(String[] args)
        {
                int number = 4;

                int[][] arys = printCircle(number);

                for (int i = 0; i < number; i++)
                {
                        for (int j = 0; j < number; j++)
                        {
                                System.out.print(arys[i][j] + "\t");
                        }
                        System.out.println();
                }
        }
        private static int[][] printCircle(int number)
        {
                int[][] ary = new int[number][number];

                int rightLen;
                int downLen;
                int leftLen;
                int upLen;

                int rightRow = 0;
                int rightCol = 0;
                int leftRow = number - 1;
                int leftCol = number - 1;
                int downRow = 1;
                int downCol = number - 1;
                int upRow = number - 2;
                int upCol = 0;

                int digit = 1;

                while (number > 0)
                {
                        rightLen = number;
                        downLen = number - 1;
                        leftLen = number - 1;
                        upLen = number - 2;
                        // Step 1: print to right
                        for (int i = 0, temp = rightCol; i < rightLen; i++)
                        {
                                ary[rightRow][temp++] = digit++;
                        }

                        // Step 2: print to down
                        for (int j = 0, temp = downRow; j < downLen; j++)
                        {
                                ary[temp++][downCol] = digit++;
                        }

                        // move left
                        for (int m = 0, temp = leftCol - 1; m < leftLen; m++)
                        {
                                ary[leftRow][temp--] = digit++;
                        }

                        // move up
                        for (int n = 0, temp = upRow; n < upLen; n++)
                        {
                                ary[temp--][upCol] = digit++;
                        }

                        number = number - 2;

                        // increas/decrease the row and column
                        rightRow++;
                        rightCol++;
                        downRow++;
                        downCol--;
                        leftRow--;
                        leftCol--;
                        upRow--;
                        upCol++;
                }
                return ary;
        }
}
回复 使用道具 举报
CHENVICTORY 发表于 2015-10-11 21:49
这种算法题就不要纠结了,没什么用,有时间就看看50道基础题吧。

求50道基础题
回复 使用道具 举报
一看就头疼
回复 使用道具 举报
这种算法题就不要纠结了,没什么用,有时间就看看50道基础题吧。
回复 使用道具 举报
yige看了会头痛的题
回复 使用道具 举报
我的帖子里有一个讲的是这个,你可以去看一下,这个主要是你可以把它分为四个部分来看,1、从左到右2、从上到下、3从右往左4,、从下往上
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马