三种幻方输出方法

news/2025/3/10 0:51:30/文章来源:https://www.cnblogs.com/smdj/p/18761721

来源:洛谷Scarlet大佬
Scarlet大佬的github
推导过程在文件里搜magic就有,也有大佬的其他算法随笔

以下是总结代码

#include <bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=1e3+10;
LL n,magic[N][N];//首先,对于所有幻方,其特征值为 n*(n*n+1)/2//奇数阶幻方
void magic_odd(int n)
{for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<<(i+j+n-(n+3)/2)%n*n+(i+j*2-2)%n+1<<" ";}cout<<endl;}
}//双偶数阶幻方(n要是4的倍数)
void magic4(int n)
{LL total=n*n+1;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){magic[i][j]=(i-1)*n+j;if((i%4)/2==(j%4)/2){magic[i][j]=total-magic[i][j];}cout<<magic[i][j]<<" ";}cout<<endl;}
}//单偶数阶幻方
void magic2(int n)
{int p=n/2,p2=p*p;//先生成奇数阶幻方for(int i=1;i<=p;i++){for(int j=1;j<=p;j++){magic[i][j]=(i+j+p-(p+3)/2)%p*p+(i+j*2-2)%p+1;}}//构建分块矩阵for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int ii=(i-1)/p;int jj=(j-1)/p;int offset=0;//    0   |   1//0|  0       2*p2//1| 3*p2     p2if(ii==0&&jj==0) offset=0;else if(ii==0&&jj==1) offset=2*p2;else if(ii==1&&jj==0) offset=3*p2;else if(ii==1&&jj==1) offset=p2;int oi=(i-1)%p+1;int oj=(j-1)%p+1;magic[i][j]=magic[oi][oj]+offset;}}//前k列的上下两半互换int k=(n-2)/4;for(int j=1;j<=k;j++){for(int i=1;i<=p;i++){swap(magic[i][j],magic[i+p][j]);}}//将k+1行上 1 ~ 2*k 列 与对应的 +p 行交换for(int j=1;j<=2*k;j++){swap(magic[k+1][j],magic[k+1+p][j]);}//将k+1+n列 往左数共k-1列 的上下对换int cnt=k-1,j=k+1+n;while(cnt--){for(int i=1;i<=p;i++){swap(magic[i][j],magic[i+p][j]);}j--;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cout<<setw(3)<<magic[i][j]<<" ";}cout<<endl;}
}int main() {cin>>n;magic2(n);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/896180.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu安装最新版本的cmake

1、下载地址 Index of /files/LatestRelease ,目前最新的是3.31.6 或者命令行方式下载wget https://cmake.org/files/LatestRelease/cmake-3.31.6-linux-x86_64.tar.gz2、解压tar -zxvf cmake-3.31.6-linux-x86_64.tar.gz3、替换已有的cmake,mv命令必须目标路径为空,所以使用…

[AI/GPT] Anything-LLM : (MIT)

概述: Anything LLM 简述一体式桌面和Docker AI应用程序,内置RAG、AI代理、无代码代理构建器等。urlhttps://anythingllm.com https://github.com/Mintplex-Labs/anything-llm20250220 : 3.7k fork / 38.1K star创建公司:Mintplex Labs Inc.创立时间:2023年12月(首次公开)…

再次认识java反射

一、概述 在认识java反射之前我们先来认识一下什么是动态语言与静态语言。 动态语言 是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以 被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。 主要…

【问题】HashMap的computeIfAbsent方法丢失数据问题分析

问题背景 前段时间碰到客户问题发现是 ConcurrentHashMap的computeIfAbsent导致死循环(ConcurrentHashMap死循环问题分析)就很好奇HashMap的computeIfAbsent会不会也有问题,一试之下发现确实存在问题,相同的代码在HashMap中会丢失插入的数据。 发生原因 【循环添加】时,如…

CFA学习

定量分析 利率 利率的定义:被认为是 ① 平衡借贷双方的平衡点(equilibrium interest rates)② 贴现率(货币的时间价值)③ 机会成本 利率的组成:通货膨胀➕各种风险 计算【现值/终值】用时间轴确实一目了然! # 经济学 # 财务报表分析 # 公司理财 # 投资组合管理 # 权益投…

INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性

INFINI Labs 产品更新发布!此次更新,Easysearch 增加了新的功能和数据类型,包括 wildcard 数据类型、Point in time 搜索 API、异步搜索 API、数值和日期字段的 doc-values 搜索支持,Console 新增了日志查询功能。 INFINI Easysearch v1.11.0 INFINI Easysearch 是一个分布…

语法trick

for (int i = 1; i <= n; ++i) {cout << dist[i] << " \n"[i == n];}

百万架构师第四十七课:并发编程的原理(二)|JavaGuide

原文链接 JavaGuide《并发编程的艺术》 并发编程的实现原理 目标上节课内容回顾 synchronized 原理分析 wait 和 notify Lock 同步锁回顾原子性 可见性 有序性JMM ​ JMM 是 JAVA 里边定义的内存模型。定义了多线程和我们内存交互的规范。屏蔽了硬件和操作系统访问内存的差异。…

[极客大挑战 2019]Havefun 1

进网站显示一只猫,于是看源代码 发现下面有注释<!--$cat=$_GET[cat];echo $cat;if($cat==dog){echo Syc{cat_cat_cat_cat};}-->所以在后面加上/index.php?cat=dog即可(小猫可爱捏)

提取excel中的图片

需求: 提取excel中嵌入单元格的图片 实现思路: 用pandas读取文件,对于嵌入图片的单元格则会显示其函数 问题:wps与office嵌入方法有所不同,wps使用函数嵌套,而office则是设置随单元格大小变动,对于后者,会被视为是悬浮的图片,使用pandas无法提取任何一张图片 源文件如…

2019年-PTA模拟赛-L2-1 链表去重(一维数组模拟链表)

一维数组模拟链表一维数组模拟链表 被删除的结点仍然在e数组中,因此记录一下被删除的结点的地址就可以找到其值AcCode: #include<bits/stdc++.h> using namespace std; int e[100010], ne[100010], vis[100010]; vector<int> delNode; int main(){int N, rootAdre…