九宫图简介
九宫图是我国古老的数学问题,也是一种数字艺术,就是把1~9九个数字填到3行3列九个方格中,使其每一横、坚、斜行之和都等于15。如下图就是九宫图:
编程思想
要计算九宫图,我首先想到的是找数字规律。对于九宫图而言,以每个边角数字(如4)为首位,都能有3组不重复的数字组合的和为15。例如上图中以4为开头则有4、9、2,和4、3、8和 4、5、6三组数字之和为15。如果仅要求第一个数字是4,后两个数字可以颠倒位置,则这样的数字组合有6种。同理以中央数字为开头,在后两个数字可以颠倒位置的情况下,会有8个数字组合的和为15。利用这一规律,我们可以轻易得到九宫图中的4个拐角数字和1个中央数字,其他数字就可轻易计算出。
算法
1、创建全局的一个数组和一个int型变量分部用来存储4个边角数字和1个中央数字。设置标记数字d=0;
2、利用三层for循环将第一、第二、第三个数字均从1开始累加,到9为止,中间嵌套if判断语句保证三个数字不相等。
3、在for循环的最内层计算三个数字之和,如果等于15,则标记数字d自增1,表示已经找到一组和为15的数字组合。
4、在循环的最外层,也就是第一个数字不变,后面两个数字取任意不重复值取完之后,利用if语句进行判断,如果d的值自增到了6,则说明找到了边角数字,存入数组;如果d的值自增到了8,则说明得到了中央数字,需要赋值存储。如果d的值自增到了4,说明此时是每一行中间的数字,但是这个数字我们不需要存储。
5、每次d分别自增到4、6、8时,说明此时内部的两层循环已经结束,第一个数字即将自增1再重新开始内部的两层循环,此时需要将d的值重新归0,以便计算不同的首位数字的到和为15的数字组合个数。
6、当得到4个边角数字和1个中央数字之和,再计算每一行中间的数字就特别简单了,只需要用15减去两个就行。
7、所有数字就得到以后,就可以展示出来。
程序代码
package InterestingProgram ;
public class JiuGongTu {
public static void main(String[] args) {
// TODO Auto-generated method stub
int d=0;
int i=0;
//创建int数组,用来存储4个边角数字
int[] corner=new int[4];
//center用来存储中央的数字
int center = 0;
for(int a=1;a<10;a++){
for(int b=1;b<10;b++){
if(a!=b){
for(int c=1;c<10;c++){
if(a!=c&&b!=c){
int x=a+b+c;
if(x==15){
d++;
}
}
}
}
}
if(d==6){
System.out.println("得到边角数字是"+a);
corner[i]=a;
i++;
d=0;
}
if(d==4){
d=0;
}
if(d==8){
System.out.println("得到中央数字是"+a);
center=a;
d=0;
}
}
//第一行中间的数字为
int m1=15-corner[0]-corner[1];
//最后一行中间的数字为
int m2=15-corner[2]-corner[3];
//左边列中间的数字为
int m3=15-corner[0]-corner[2];
//左边列中间的数字为
int m4=15-corner[1]-corner[3];
System.out.println("九宫图如下:");
System.out.println(corner[0]+" "+m1+" "+corner[1]);
System.out.println(m3+" "+center+" "+m4);
System.out.println(corner[2]+" "+m2+" "+corner[3]);
}
}
运行效果