n阶幻方【MagicSquare】

2024-01-31 14:30
文章标签 幻方 magicsquare

本文主要是介绍n阶幻方【MagicSquare】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简单介绍
幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。

幻方包括:奇数幻方、单偶数幻方和双偶数幻方
单偶数幻方(即4n+2式):幻方阶数n为不能被4整除的偶数,比如6、10、14
双偶数幻方(即4n式):幻方行列数n能被4整除的幻方,比如4、8、12

算法分析:

  • 奇数阶幻方:下一个元素在右上角,出列就延展,若为倍数放下一行
    在这里插入图片描述
    以n = 3为例:
    在这里插入图片描述
    1.第0行最中间为1
    2.下一个位置是右上方,如5、6;若越界,将沿行、列方向看成环形,如2、3
    3.若当前位置是n的倍数,表示一条对角线已满,则下一个位置是本列下一行,如4、7

  • 单偶数阶幻方
    思考ing待更新…

  • 双偶数阶幻方
    以 n = 8为例:
    1.用横线和竖线将n阶方阵划分为m个4 * 4的小方阵
    在这里插入图片描述
    2.将n * n个数从小到大,从左到右,从上到下依次填入方阵中,遇到4 * 4小方阵的对角线不填(此位置不填的数不作为下一个位置填入的数)
    3.将n * n个数从大到小,从左到右,从上到下依次填入方阵中4 * 4小方阵的对角线上,其他位置不填(此位置不填的数不作为下一个位置填入的数)

代码如下:

import java.util.Scanner;
public class MagicSquare {public static void main(String[] args) {System.out.println("请选择想输出幻方的阶数:");Scanner sc = new Scanner(System.in);int n = sc.nextInt();int array[][] = new int[n][n];if (n%2!=0){  //奇数阶oddMagic(n,array);}else if (n%4!=0){  //单偶数阶return;}else{  //双偶数阶doubleEvenMagic(n,array);}printSquare(array);}public static void oddMagic(int n,int array[][]){int i = 0;int j = n/2;for (int k = 1; k <= n*n; k++) {array[i][j] = k;if (k%n==0) {  //如果当前数字是n的倍数,向下走i++;}else{  //如果当前数字不是n的倍数,向左上走i--;j++;if (i<0) i=n-1;if (j>n-1) j=0;}}}public static void doubleEvenMagic(int n,int array[][]){int c1=1,c2=n*n;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (i%4==j%4||(i+j)%4==3){  //对角线则反排array[i][j] = c2;}else{  //非对角线正排array[i][j] = c1;}c2--;c1++;}}}public static void singleEvenMagic(int n,int array[][]){System.out.println("思考ing...待更新...");}public static void printSquare(int array[][]){for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {System.out.printf("%4d",array[i][j]);}System.out.println();}}
}

这篇关于n阶幻方【MagicSquare】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/664093

相关文章

[GESP样题 四级] 填幻方和幸运数

B3940 [GESP样题 四级] 填幻方 题目 在一个N×N 的正方形网格中,每个格子分别填上从 1 到 N×N 的正整数,使得正方形中任一行、任一列及对角线的几个数之和都相等,则这种正方形图案就称为“幻方”(输出样例中展示了一个3×3 的幻方)。我国古代称为“河图”、“洛书”,又叫“纵横图”。幻方看似神奇,但当 N 为奇数时有很方便的填法: 一开始正方形中没有填任何数字。首先,在第一行的

Tsukinai的第二十七个程序(幻方矩阵的判断)

Tsukinai的第二十七个程序 检验并打印幻方矩阵。在下面的5×5阶幻方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的, 试编写程序将这些幻方矩阵中的元素读到一个二维整型数组中,然后检验其是否为幻方矩阵,并将其按如下格式显示到屏幕上。 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 输出提示信息:

幻方量化开源国内首个MoE大模型,全新架构、免费商用

幻方量化开源国内首个MoE大模型,全新架构、免费商用 OSC OSC开源社区 2024-01-12 19:01 广东 幻方量化旗下组织深度求索发布了国内首个开源 MoE 大模型 —— DeepSeekMoE,全新架构,免费商用。 今年 4 月,幻方量化发布公告称,公司将集中资源和力量,全力投身到服务于全人类共同利益的人工智能技术之中,成立新的独立研究组织,探索 AGI 的本质。幻方将

C++实现幻方实验

我们这个实验目的是实现大于2的奇数的n阶幻方 根据上述的例子我们可以看到一些规律,显示1放在最上方中间的位置,然后向右上方延申,在达到n这个数字时,停止延申,然后在n的下方开始n+1的新一轮延申。明白了原理之后就很容易使用代码实现这个实验了。 #include <iostream>using namespace std;int main(){int n, i = 0, j = 0, k

N(奇数)阶幻方解法

幻方也加魔方,通俗点就是N*N的方格中,填入1~n^2个数,使得横坚斜的和都相同。大家最熟悉的应该就是九宫格的3阶了。这儿我只和大家分享一下奇数阶的;因为奇数阶的就只有一个规律,偶数阶的稍微有点复杂(其实我只会4阶,还是从射雕英雄传里面学来的,在写这篇博客的时候我也特地去百度了一下,发现偶数阶的好像不同的阶数规律不一样,所以这儿 就只和大家说说偶数阶的了)。 3

中国传统游戏-幻方-c/c++实现

幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。 幻方也是一种中国传统游戏。旧时在官府、学堂多见。它是将从一到若干个数的自然数排成纵横各为若干个数的正方形,使在同一行、同一列和同一对角线上的几个数的和都相等。 幻方又称为魔方,方阵或厅平方,最早起源于中国。 宋代数学家杨辉称之为纵横图。 幻方的幻在于无论取哪一条路线,最后得到的和

C#,任意阶幻方(Magic Square)的算法与源代码

1 什么是幻方? 幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。 幻方也是一种中国传统游戏。旧时在官府、学堂多见。它是将从一到若干个数的自然数排成纵横各为若干个数的正方形,使在同一行、同一列和同一对角线上的几个数的和都相等。 2 幻方的历史纪录 在一个由若干个排列整齐的数组成的正方形中,正方形中任意一横行、一纵行及对

神奇的幻方(C语言)

神奇的幻方(C语言解法) 幻方是一个很神奇的N×N矩阵,它的每行、每列与对角线,加起来的数字和都是相同的。我们可以通过以下方法构建一个幻方。(阶数为奇数) 1.第一个数字写在第一行的中间 2.下一个数字,都写在上一个数字的右上方: 如果该数字在第一行,则下一个数字写在最后一行,列数为该数字的右一列 如果该数字在最后一列,则下一个数字写在第一列,行数为该数字的上一行 如果该数字在右上角,或者该数字的

偶阶幻方的算术构造

本文介绍的任意偶阶幻方的构造方法,无需考虑单偶、双偶,也不需要高等数学基础。与许多其他方法比较,或有新意。仅有初等数学基础,就可方便构造。 ——求质疑! 一、构造方法 本法构造的幻方,先根据几条通项公式,求得坐标轴上的1至n²自然数列中的部分数后,再依据本法的排列规则,可简便填充该数列其余所有的数字。 先把给定数列最小和最大的8个数,建立一个4阶幻方,作为任意n阶幻方的中心。以该4阶幻方为

【模拟】神奇的幻方

样例输入#1 3 样例输出#1 8 1 63 5 74 9 2 思路 水题 模拟 #include<iostream>#include<cstdio>using namespace std;int n,x,y,a[505][505];int main(){scanf("%d",&n);a[1][(n+1)/2]=1;x=1;y=(n+1)/2;for(int i=