JAVA打印回型数

来源:互联网 发布:淘宝闺蜜投诉入口 编辑:程序博客网 时间:2024/06/04 01:38

额,因为上次在做小米面试题目的时候碰到了这样的一个题目,如下

说是打印1000*1000数组中的某个位置的数字,但是这些数字是按找回型排列的。

如:

1        2         3        4         5        6        7         8
28      29      30      31      32      33      34       9
27      48      49      50      51      52      35      10
26      47      60      61      62      53      36      11
25      46      59      64      63      54      37      12
24      45      58      57      56      55      38      13
23      44      43      42      41      40      39      14
22      21      20      19      18      17      16      15


思路:把这个数组看成一个回字形,然后回字里面再包裹一个回字。。。。

把每个数字的数组索引写在一旁做参考,能够帮助自己很快的找到想要位置。

先给上面最外边第一条数组赋值,方向是从左到右→

给第二条数组赋值,方向是从上到下↓

第三条,从右到左←

第四条,从下到上↑

上面几步为一个循环,反复重复上面的步骤。。

下面上代码,因为我想起了火影忍着里的鸣人- - 。

class naratoArr {
public static void main (String [] args) {
int gs = 8;
narato(gs);

}

static void narato (int size) {
int start = 0;//坐标的起始点
int end = size-1;//坐标的终止点
int values = 1;//每个坐标内的值,不断变化
int arr[][] = new int [size][size];//二维方阵,里面每个元素的值都是values变量代表的
while (true) {//一直循环
if (start>=end) break;//当方阵的大小为奇数时,起始点等于终止点,就意味着在最里面的一圈了。但最中心还剩一个坐标
//为偶数时,起始点比终止点小1,在最里面的圈子。最中心没有坐标了
for (int i=start; i<=end; i++) {//如方阵为5时,为arr[0][0~4]进行赋值,方向从左到右,values值不断递增
arr[start][i] = values;
//System.out.print(values);
values++;

}
for (int i=start+1; i<=end; i++) {//如方阵为5时,为arr[0~4][4]进行赋值,方向从上到下,values值不断递增
arr[i][end] = values;
values++;
//System.out.print(values);
}
for (int i=end-1; i>=start; i--) {//如方阵为5时,为arr[4][3~0]进行赋值,方向从右到左,values值不断递增
arr[end][i] = values;
values++;
//System.out.print(values);
}
for (int i=end-1; i>start; i--) {//如方阵为5时,为arr[3~1][0]进行赋值,方向从下到上,values值不断递增
arr[i][start] = values;
values++;
//System.out.print(values);
}
start++; //两个坐标都减1,就像是方阵小了一圈
end--;
}
//System.out.println(start+""+end);
if ((size%2)==1)//当方阵大小为奇数时,为最中心的点赋值
arr[start][end] = size*size;
for (int i=0; i<size; i++) {//遍历二维数组,并打印
for (int j=0; j<size; j++)
System.out.print(arr[i][j]+"\t");
System.out.println();
}
}
}


原创粉丝点击