java实现求解n宫格
来源:互联网 发布:中国社会调查数据库 编辑:程序博客网 时间:2024/06/04 16:32
n宫格:奇数阶宫格,使用1-n×n填入其中,使得每一行、每一列、正斜线和反斜线上每n个数的和都相等。
解法:使用网上已有算法,具体见附录。
public class N_nine {public static void main(String[] args){solution(5);}public static void solution(int n){int[][] nine=new int[n][n];if(n%2==0){System.out.println("偶数格无法求解!");return;}int i,j;i=0;j=n/2;int step;for(step=1;step<=n*n;++step){nine[i][j]=step;//System.out.println(i+" "+j+" step: "+step+" nine:"+nine[i][j]);i=i-1;j=j+1;if(i==-1 && j==n){i=i+2;j=j-1;}if(i==-1){i=n-1;}if(j==n){j=0;}if(nine[i][j]!=0){i=i+2;j=j-1;}}for(int ii=0;ii<n;++ii){for(int jj=0;jj<n;++jj){System.out.print(nine[ii][jj]+" ");}System.out.println();}}}
九宫格题解法(此方法同样适用于二十五宫格
四十九宫格、八十一宫格)
九宫格涉及的数字少,怕讲不清楚,现以二十五宫格为例,讲解此类题的做法:
例题:请把1—25个数字放入下列空格中,要求做到横、纵、斜角相加均等于65
(所给的数字如有负数或没有按顺序排列,请先把数字按从小到大的顺序进行排列)
第一步:最小的数必须放在最上一行的最中间格。
1
第二步:第二小的数必须放在最小数所在列右列的最下格。
1
2
第三步:往右上格填写第三小的数,只要碰到最右列壁,就将下一个数填入上一行的最左侧格(如3碰到最右列壁后,4则填在上一行的最左侧格)。后面以此类推。
1
4
3
2
第四步:若右上方有格就一直填下一个数字,若右上方有数字就在上一个数字的下一格填下一个数,(如下图4的右上方有空格就填5,如5的右上方有空格就填6,但1早占了5右上格的位置,因此6就填在5的下一格)。后面以此类推。
1
8
5
7
4
6
3
2
第五步:在最上行碰壁后,下一个数要填入右列的最下格(如2、9的填法)。后面以此类推。
1
8
5
7
4
6
3
2
9
第六步:重复前面的规律。
1
8
15
5
7
14
4
6
13
10
12
3
11
2
9
第七步:右上角的下一个数,必定在其下一格。如16必定在15的下一格。
1
8
15
5
7
14
16
4
6
13
10
12
3
11
2
9
第八步:还是重复前面的规律。
17
24
1
8
15
23
5
7
14
16
4
6
13
20
22
10
12
19
21
3
11
18
25
2
9
此类题的规律:
1、最小值永远在最上行的中间格,最大值永远在最下行的中间格。
2、最上行碰壁,下一个数填入右列最下格。
3、最右列碰壁,下一个数填入上一行最左格。
4、右上格有空就一直填下一个数;右上格有数,就将下一个数字填入上一个数的下一格。
5、右上角的下一个数,必定在其下一格;左下角的上一个数,必定在其上一格。
不知道讲明白没有。如果看懂了大家不妨用这个方法试试填9宫格、49宫格、81宫格。
- java实现求解n宫格
- java实现N元一次方程组求解
- java实现N阶行列式求解
- 回溯法求解 “n 皇后 问题”——Java 实现
- 回溯法求解N皇后问题(Java实现)
- java 求解第n个丑数
- n皇后问题求解 java
- 【java】N阶行列式求解
- java求解第N个素数(质数)
- 算术表达式求解java实现
- 用递归和栈的方法实现N皇后求解
- 选主元doolittle分解法求解n元线性方程组 MATLAB实现
- 一行代码求解1-n的累加和(&实现)
- Python实现遗传算法求解n-queens问题(1)
- Python实现遗传算法求解n-queens问题(2)
- 回溯法求解n皇后问题——递归实现
- java求解LeetCode题目,实现求解数组中的majority element
- 贪心法求解活动安排(java实现)
- Linux平台Oracle多个实例启动说明
- android singleTask
- Guava Optional 和 Java 8 optional
- Linux最常用的命令
- android和iOS平台的崩溃捕获和收集
- java实现求解n宫格
- C++读写excel文件(二)—— 用CSpreadSheet读写(by yukin_xue)
- UIButton按钮的背景图和字体颜色
- CodeForces 115C. Plumber 解题报告
- 修改 堆栈大小 普适性方案总结 (跨平台 windows linux 栈设置大小)
- Looper、handle、Message图文详解
- 如何实现WORKFLOW通知页面跳转到FORM
- CheckBoxList 多选 样式 jquery获取选择项 C#获取选择项
- 浏览器多标签页同步、竞争问题