黑马程序员技术交流社区

标题: 深圳0422期学员的螺旋矩阵【任意行任意列】(二) [打印本页]

作者: 依秋无泪    时间: 2015-4-29 21:21
标题: 深圳0422期学员的螺旋矩阵【任意行任意列】(二)
//这是第二个帖子,第一个帖子的地址是:http://bbs.itheima.com/thread-192515-1-1.html
//在做按自己的思路做完后,发现第四天的作业有螺旋矩阵的作业,看了答案后,发现它的代码很简洁,思路很巧妙
//但是它的功能是任意行列,我希望是任意行,任意列
//经过理解后,自己写了代码,发现当行数跟列数一致的时候不会出问题,行数跟列数不一致的时候有时候可以,有时候不可以
//求大牛帮忙指导下
import java.util.Scanner;
/**
*任意行任意列的内循环螺旋矩阵
*参考有限行列的内循环螺旋矩阵的思路,写出的任意行任意列的内循环螺旋矩阵
*/
class SpiralDemo01
{
public static void main(String []args) {
  Scanner sn=new Scanner(System.in);
  System.out.print("请输入行数:");
  int y=sn.nextInt();
   System.out.print("请输入列数:");
  int x=sn.nextInt();

  int [][]a=new int [x][y];
  LXJZ(a,x,y);
  for(int i=0;i<y;i++) {
   for(int j=0;j<x;j++)
    System.out.print(a[j]+"\t");
   System.out.println();
  }
}
public static void LXJZ(int [][]a,int x,int y) {//螺旋矩阵的方法
   int key=0;
  for(int i=0;i<x+y+1;i++) {//最多走(x+y+2)/4的循环,走一次,则有效范围缩小一次
   
   for(int j=i;j<x-i;j++)//往右走,走到最右角
    if(a[j]==0)a[j]=++key;
   
   for(int j=i+1;j<y-i;j++)//往下走,从最右上角的下面一个数开始走,走到最右下角
   if(a[x-i-1][j]==0) a[x-i-1][j]=++key;
   
   for(int j=x-i-1-1;j>=i;j--)//往左走,从最右下角的左边一个数开始走,走到最左下角
   
   if(a[j][y-i-1]==0) a[j][y-i-1]=++key;
     
   
   
   for(int j=y-i-1-1;j>i;j--)//往上走,从最左下角的上面一个数开始走,走到最左上角的下面一个数【因为最左上角在开头已经走过了】
   if(a[j]==0) a[j]=++key;
   
   
  }

}
}

1.png (3.92 KB, 下载次数: 3)

1.png

2.png (5.77 KB, 下载次数: 4)

2.png

3.png (5.53 KB, 下载次数: 3)

3.png

4.png (6.31 KB, 下载次数: 5)

4.png

作者: 依秋无泪    时间: 2015-4-29 23:38
longsee88 发表于 2015-4-29 21:40
0424期学员完全看不懂的路过。。。。

会学会的,加油吧~~~没人帮我找BUG,也是醉啊,秒沉的节奏




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