黑马程序员技术交流社区
标题:
分享螺旋数组算法!! 还望大家多多给意见!!
[打印本页]
作者:
貂裘换酒
时间:
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