Java——打印九宫格的算法思路(任意维奇数行方阵)

九宫格算法口诀:

一居下行正中央,依次斜填切莫忘;下出框时向上放,右出框时向左放;排重便在上格填,右下排重一个样。

3 X 3 九宫格的算法思路:

1.始终将数字1放置在最后一行的中间位置;

2.数字2右下斜填,下出框向上放

 

3.数字3右下斜填,右出框向左放

4.数字4右下斜填,排重便在上格放

 

5.数字5右下斜填

 

6.数字6右下斜填

7.数字7右下斜填,右下排重一个样

8.数字8右下斜填,右出框向左放

9.数字9右下斜填,下出框向上放

3X3的九宫格:

注意:用变量a代表行号,用变量b代表列号;注意中间有虚拟位置,凡是下一个数字的位置是上个数字的右下角,即行号加1,列号加1;

数字1——行号2——列号1

数字2——行号3——列号2——下出框  行号0——列号2

数字3——行号1——列号3——右出框  行号1——列号0

数字4——行号2——列号1—— 重叠    行号0——列号0

数字5——行号1——列号1                    行号1——列号1

数字6——行号2——列号2                    行号2——列号2

数字7——行号3——列号3—— 重叠     行号1——列号2

数字8——行号2——列号3——右出框   行号2——列号0

数字9——行号3——列号1——下出框   行号0——列号1

规律:

出框——行号求余3,列号求余3;

重叠——行号减2,列号减1;

推广:

重叠——行号减2,列号减1;

其他——行号求余3,列号求余3;

 

public class NineTable33
{
	public static void main(String[] args)
	{
		int[][] arr = new int[3][3];
		int a = 2;   //行
		int b = 3/2; //列
		for(int i = 1; i <= 9; i++)
		{
			arr[a++][b++] = i;
			if(i % 3 == 0)
			{
				a = a - 2;
				b = b - 1;
			}
			else
			{
				a = a % 3;
				b = b % 3;
			}
		}
		
		System.out.println("输出3X3九宫格结果:");
		for(int i = 0; i < 3; i++)
		{
			for(int j = 0; j < 3; j++)
			{
				System.out.print(arr[i][j] + "\t");
			}
			System.out.println();
		}
	}
}

运行结果:

 

#############################################################################################################################################################

输出任意维的九宫格(维数只能是奇数)

public class NineTableNN
{
	static final int length = 5; //维数必须为奇数
	public static void main(String[] args)
	{
		int[][] arr = new int[length][length];
		int a = length-1;   //行
		int b = length/2; //列
		for(int i = 1; i <= length*length; i++)
		{
			arr[a++][b++] = i;
			if(i % length == 0)
			{
				a = a - 2;
				b = b - 1;
			}
			else
			{
				a = a % length;
				b = b % length;
			}
		}
		
		System.out.println("输出NXN九宫格结果:");
		for(int i = 0; i < length; i++)
		{
			for(int j = 0; j < length; j++)
			{
				System.out.print(arr[i][j] + "\t");
			}
			System.out.println();
		}
	}
}

 

运行结果:

 

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值