幻方问题
来源:互联网 发布:sql语句的关键字 编辑:程序博客网 时间:2024/04/29 02:49
传说,大禹治水时,从洛河里爬出一只大乌龟,背上有一些奇妙的标记。人们仔细辨认后,发现原来是一些极有规律的数字:它的纵、横、斜每一列每一行三个数字的和都是15!
中国古书上称这个纵横图为‘洛书’,后来研究者多称它为“幻方(magic square)”。它变幻莫测,趣味无穷。
n阶的幻方表示一个n阶矩阵,它共有N2个元素,每个元素分别取值1~N2不重复,它的各行,各列,以及对角线之和都相等。
对于奇数阶的幻方构造,有一个简单的方法:
- 把1放置在最后一行的中间。
- 顺序将2,3,4,...等数放在右下的方格中。
- 当右下方格出界的时候,则由另一边进入。
- 当右下方格中已经填有数,则把数填入正上方的方格中。
- 按照以上步骤直到填写完所有N2个方格。
以3阶幻方为例,
1填写在(3,2)(第三行第2列)的位置上;
2应当填写在其右下方格中,由于往下已经超出界限,因此变成位置(1,3);
3应该填写的位置往右往下都超出了界限,因此填入位置是(2,1);
4应放的位置被占了,因此放在3的上方位置(1,1);
5、6都按照规则放在其右下方格位置(2,2),(3,3);
7放在6的上方位置(2,3);
8因为右边越界,放在(3,1);
9放入(1,2);
4 9 2
3 5 7
8 1 6
类似的可以构造其它奇数阶的幻方。
输入:
要求的奇数阶幻方的阶数
输出:
按照上述方法构造出来的幻方,两个元素之间用逗号","隔开,每行行尾进行换行。
范例输入:
5↵
范例输出:
11,18,25,2,9↵
10,12,19,21,3↵
4,6,13,20,22↵
23,5,7,14,16↵
17,24,1,8,15↵
________________________________________________________________________________________
解答:
import java.util.*;
public class Main43 {
public static void main(String args[]) throws Exception {
Scanner cin=new Scanner(System.in);
int N = cin.nextInt();
int line_row;
int line_column;
int[][] magic = new int[N][N];
line_row = N - 1;
line_column = N/2;
for(int i = 0; i < N * N; i++){
if(i == 0){
magic[line_row][line_column] = 1;
continue;
}
int tmp_row = line_row;
int tmp_col = line_column;
line_row = line_row + 1;
line_column = line_column + 1;
tmp_row = tmp_row - 1;
if(tmp_row < 0){
tmp_row = N - 1;
}
if(line_row == N){
line_row = 0;
}
if(line_column == N){
line_column = 0;
}
if(magic[line_row][line_column] != 0){
line_row = tmp_row;
line_column = tmp_col;
}
magic[line_row][line_column] = i + 1;
}
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
if(j == N-1){
System.out.print(magic[i][j] + "\n");
}else{
System.out.print(magic[i][j] + ",");
}
}
}
}
}
- 幻方问题
- 幻方问题
- 幻方问题
- 幻方问题求解
- NO.3幻方问题
- 幻方问题简单尝试
- 四阶素数幻方问题
- 无聊之作:幻方问题 ( 全 )
- 幻方问题的 求解方法
- 第三方登陆问题
- CodeForces-710C Magic Odd Square(幻方问题/构造)
- (纵横图问题)(n阶奇数幻方)
- 幻方
- 幻方
- 幻方
- 幻方
- 幻方
- 幻方
- Oracle online redo log日志 (当前或非当前日志) 损坏之后的DB恢复
- 选择排序法
- Java的基本数据类型
- 程序员谨防加班猝死之十大建议
- java内存泄漏测试
- 幻方问题
- mongodb中使用mapreduce
- Windows 7系统安装MySQL5.5.21图解
- 回望测绘前辈灿烂硕果 研讨学术大家精深思想 陈俊勇院士学术思想研讨会举办
- gnome桌面环境相关
- mysql 复合主键
- 用vs开发工具调试javascript
- 水杯测试看测试
- 关于升级ADT22后出现java.lang.ClassNotFoundException错误的解决