黑马程序员技术交流社区

标题: 有关螺旋方阵 [打印本页]

作者: flyingwind    时间: 2015-11-25 22:42
标题: 有关螺旋方阵
1 , n阶顺时针螺旋方阵:  
C:\Users\moonriver\Desktop\1.png
代码:
  1. import java.util.Scanner;
  2. public class SpiralMatrix {
  3.         public static void main(String [] args){
  4.                 Scanner scn= new Scanner(System.in);
  5.                 System.out.println("请输入螺旋方阵的阶数: ");
  6.                 int order=scn.nextInt();
  7.                
  8.                 SpiralMatrix sm=new SpiralMatrix();
  9.                 sm.printClockWise(order);
  10.         }
  11.         //找到一个函数能够计算出order阶矩阵中  row 行, col列上的数值大小, 想到递归
  12.         public int getValue(int row, int col, int order) {
  13.                 //基准条件
  14.                 if(1==order)      //最简单的一阶
  15.                         return order;
  16.                 if(0==order)      //偶数阶的最简单形式
  17.                         return order;
  18.                
  19.                 // 高阶矩阵而元素又位于矩阵的最外层, 能够通过简单的计算得出.
  20.                 //由于涉及多个 return语句, 只用if即可 .
  21.                 if(0==row)
  22.                         return col+1;
  23.                 if (col==order-1)
  24.                         return col+row+1;
  25.                 if(row==order-1)
  26.                         return 3*order-2-col;
  27.                 if(0==col)
  28.                         return 4*order-3-row;
  29.                 //所有简单的情况排除后,进行脱阶运算.
  30.                 return (order*4-4)+getValue(row-1, col-1, order-2);
  31.         }
  32.         public void  printClockWise(int order) {
  33.                 int value;
  34. //                int sum=order*order+1;
  35.                 for(int i=0;i<order; i++) {
  36.                         for(int j=0;j<order; j++) {
  37.                                 value=getValue(i,j,order);
  38. //                                value=sum-value;
  39.                                 System.out.print(value+"\t");
  40.                         }
  41.                         System.out.println("\n\n");
  42.                 }
  43.         }
  44. }
复制代码


2,  由内而外的螺旋 方阵
C:\Users\moonriver\Desktop\2.png

代码:
  1. import java.util.Scanner;
  2. public class SpiralMatrix {
  3.         public static void main(String [] args){
  4.                 Scanner scn= new Scanner(System.in);
  5.                 System.out.println("请输入螺旋方阵的阶数: ");
  6.                 int order=scn.nextInt();
  7.                
  8.                 SpiralMatrix sm=new SpiralMatrix();
  9.                 sm.printClockWise(order);
  10.         }
  11.         //找到一个函数能够计算出order阶矩阵中  row 行, col列上的数值大小, 想到递归
  12.         public int getValue(int row, int col, int order) {
  13.                 //基准条件
  14.                 if(1==order)      //最简单的一阶
  15.                         return order;
  16.                 if(0==order)      //偶数阶的最简单形式
  17.                         return order;
  18.                
  19.                 // 高阶矩阵而元素又位于矩阵的最外层, 能够通过简单的计算得出.
  20.                 //由于涉及多个 return语句, 只用if即可 .
  21.                 if(0==row)
  22.                         return col+1;
  23.                 if (col==order-1)
  24.                         return col+row+1;
  25.                 if(row==order-1)
  26.                         return 3*order-2-col;
  27.                 if(0==col)
  28.                         return 4*order-3-row;
  29.                 //所有简单的情况排除后,进行脱阶运算.
  30.                 return (order*4-4)+getValue(row-1, col-1, order-2);
  31.         }
  32.         public void  printClockWise(int order) {
  33.                 int value;
  34.                 int sum=order*order+1;
  35.                 for(int i=0;i<order; i++) {
  36.                         for(int j=0;j<order; j++) {
  37.                                 value=getValue(i,j,order);
  38.                                 value=sum-value;
  39.                                 System.out.print(value+"\t");
  40.                         }
  41.                         System.out.println("\n\n");
  42.                 }
  43.         }
  44. }
复制代码

作者: flyingwind    时间: 2015-11-25 22:48






作者: you135    时间: 2015-11-26 00:03
好难,,,
作者: flyingwind    时间: 2015-12-5 15:50
用了个递归, 把最外层细化一下,就这些
作者: Zrz_K    时间: 2015-12-6 20:50
楼主人才!   我用二维数组加循环做了一个,90行代码,给自己恶心死……
作者: 小鹿    时间: 2015-12-6 21:59
意志不坚的会看吧下去!
作者: 八宝    时间: 2015-12-10 22:11
谢谢楼主
作者: 星晴。    时间: 2015-12-11 08:32
顶顶顶,楼主加油!
作者: 王晓亮    时间: 2015-12-11 09:03
!!!!




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