黑马程序员技术交流社区

标题: 分享螺旋数组算法!! 还望大家多多给意见!! [打印本页]

作者: 貂裘换酒    时间: 2016-6-24 10:34
标题: 分享螺旋数组算法!! 还望大家多多给意见!!
/**
* 需求:写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的
* 最外圈向内螺旋方式地顺序排列。
* @author Administrator
*分析:用两层for循坏控制赋值,第一个for循环控制循环赋值的圈数i=(n+1)/2,
*在用内层的四个for循环(从0到(n-2*i-1)分别控制上下左右的数组赋值。
*代码实现如下:
*/
public class Test8 {
public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int n=scanner.nextInt();
        //创建二维数组容器
        int [][]b=new int [n][n];
        int num=1;
        //控制循环的赋值的圈数
        for(int i=0;i<(n+1)/2;i++){
                //输入的值为偶数
                if(n%2==0){
                        //控制上边从左到右的一行
                        for(int j=0;j<n-2*i-1;j++){
                                b[i][j+i]=num;
                                num++;
                        }
                        //控制左边从上到下的一列
                        for(int k=0;k<n-2*i-1;k++){
                                b[k+i][n-i-1]=num;
                                num++;
                        }
                        //控制下边从右到左的一行
                        for(int l=0;l<n-2*i-1;l++){
                                b[n-i-1][n-l-1-i]=num;
                                num++;
                        }
                        //控制右边从下到上的一列
                        for(int m=0;m<n-2*i-1;m++){
                                b[n-m-1-i][i]=num;
                                num++;
                        }
                }else { //输入的值为奇数
                        //当只有一个数的时候特殊赋值
                        if(num==n*n){
                                b[n/2][n/2]=n*n;
                        }
                        for(int j=0;j<n-2*i-1;j++){
                                b[i][j+i]=num;
                                num++;
                        }
                       
                        for(int k=0;k<n-2*i-1;k++){
                                b[k+i][n-i-1]=num;
                                num++;
                        }
                       
                        for(int l=0;l<n-2*i-1;l++){
                                b[n-i-1][n-l-1-i]=num;
                                num++;
                        }
                       
                        for(int m=0;m<n-2*i-1;m++){
                                b[n-m-1-i][i]=num;
                                num++;
                        }
                }
        }
        //循环输出二维数组
        for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                        System.out.print(b[i][j]+"\t");
                       
                }
                System.out.println("");
        }
}
}
作者: a820290471    时间: 2016-6-24 10:38
666,找了好长时间,写的不错,简单易懂
作者: 貂裘换酒    时间: 2016-6-24 10:42
a820290471 发表于 2016-6-24 10:38
666,找了好长时间,写的不错,简单易懂

呵呵!!  昨天刚做的入学考试题!!  今天等待结果所以来发个帖子,谢谢支持!!




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