九宫格算法口诀:
一居下行正中央,依次斜填切莫忘;下出框时向上放,右出框时向左放;排重便在上格填,右下排重一个样。
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();
}
}
}
运行结果: