分治法:数字旋转方阵

题目信息:


    输出一个数字方阵,要求该方阵的数字蛇形规律。

解题思路:

    解题思路,同蛇形填数问题,所以不再重点叙述。


代码实现:

package 分治法;

 

import java.util.Scanner;

 

/*

 * Dragon 2017/3/27

 * 算法设计与分析:P57

 * 本题的思路:根据数字的特点,将整个方阵分为四部分,每一部分i,j的移动不同,因此给赋值

 *          划分区间,再一层一层地解决问题

 * 易错点:数组的下标问题,循环结束的问题

 * 一种比较好的循环思维:将要赋值的数组与循环的次数(随便找一个变量来解决)分开,不容易产生混乱!!!

 */

public class 数字旋转 {

 

public static void main(String[] args)

{

Scanner in=new Scanner(System.in);

System.out.println("您想打印几阶方阵?");

int n=in.nextInt();

PrintTwoArray(NumberCircle(n));

 

}

public static int[][] NumberCircle(int n)

{

int[][] numbers=new int[n][n];

int size=n;

int number=1;

int begin=0;

int i=0,j=0;

while(size!=1 && size!=0)

{

i=begin;j=begin;

for(int k=0;k<size-1;k++)

{

numbers[i][j]=number;

number++;i++;

}

for(int k=0;k<size-1;k++)

{

numbers[i][j]=number;

number++;j++;

}

for(int k=0;k<size-1;k++)

{

numbers[i][j]=number;

number++;i--;

}

for(int k=0;k<size-1;k++)

{                                                                                                  

numbers[i][j]=number;

number++;j--;

}

size=size-2;begin=begin+1;

}

if(size==1)

numbers[begin][begin]=number;

return numbers;

}

//打印二维数组

public static void PrintTwoArray(int[][] numbers)

{

int row=numbers.length;

int cow=numbers[0].length;

for(int i=0;i<row;i++)

{

for(int j=0;j<cow;j++)

System.out.printf("%-4d",numbers[i][j]);

System.out.println();

}

}

 

}

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值