黑马程序员技术交流社区

标题: 一道打印二维数组的题,一直没啥思路 [打印本页]

作者: sandwicher    时间: 2015-10-11 20:17
标题: 一道打印二维数组的题,一直没啥思路
写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印:                                
1   2   3   4  
12  13  14  5
11  16  15  6
10  9   8   7


作者: panpanpan138    时间: 2015-10-11 20:48
我的帖子里有一个讲的是这个,你可以去看一下,这个主要是你可以把它分为四个部分来看,1、从左到右2、从上到下、3从右往左4,、从下往上
作者: fmi110    时间: 2015-10-11 21:32
yige看了会头痛的题
作者: CHENVICTORY    时间: 2015-10-11 21:49
这种算法题就不要纠结了,没什么用,有时间就看看50道基础题吧。
作者: 姜君谦大大大    时间: 2015-10-11 22:06
一看就头疼
作者: sandwicher    时间: 2015-10-11 22:18
CHENVICTORY 发表于 2015-10-11 21:49
这种算法题就不要纠结了,没什么用,有时间就看看50道基础题吧。

求50道基础题
作者: mars314    时间: 2015-10-11 22:24
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;
        }
}

作者: 三川草民    时间: 2015-10-11 22:27
这个要看规律吗
作者: 如梦丶似幻    时间: 2015-10-12 00:56
前来学习~~
作者: fwqk123    时间: 2015-10-12 09:20
逻辑题有时感觉没用  
作者: ln0491    时间: 2015-10-12 09:46
好晕,完全不懂。。。
作者: 宋卫超    时间: 2015-10-12 13:26
利用for循环嵌套,外层循环控制行数,内层循环控制列数。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2