多校第九场Math Geek(构造反幻方+找规律)

本文探讨了如何构造反幻方,即与幻方规律相反的矩阵。对于阶数大于等于5的幻方,通过特定的排列方式,并根据奇偶性调整元素,确保行和、列和、对角线和不为特定数的倍数。对于奇数阶,可以通过调整使某些和变为特定数加减1的形式;对于偶数阶,仅需调整中间的元素。3和4阶的情况可以直接使用样例。此外,还提及了网上的一些其他构造方法,如蛇形排列和随机生成矩阵的搜索策略。
摘要由CSDN通过智能技术生成

看到敏感的GEEK字样,果断先读了这题,然后演算纸上各种划拉。。。

题意:构造反幻方(貌似就是和幻方相反的意思)。实际就是个简单的找规律,

我的构造方法:当大于等于5阶时,按左到右,上到下顺序放入1到N*N

对幻方的阶数分奇偶讨论下

奇数:行和,列和,对角和都是相应中间数的N倍,满足a*N(a为正整数)所以只有正中间列和行还有对角的4个相等,只需调换相应的几个数使其不为a*N形式,且互不相等即可,由于阶数大于等于5 ,可以找到相应的调换使相应的和变成a*N+1、a*N+2,a*N-1,a*N-2(3阶会出现a*N1-2与a*N2+1相等的情况)。

偶数:行、列对角和都满足4*n+2、这时只有2个对角和能相等,当阶数大于4时直接把中间的4个数随便调换2个就可以了,构造出2个4*n型的数(4阶情况出现2个4*N型数相等的)。

3和4阶的话直接输出样例即可。

构造方法有很多,有在网上找到什么公式的是蛇形排列好像也满足。还有朴素的构造方法就是随机生成矩阵,然后各种搜索变换,直到满足条件为止。

 

代码有点绕直接输出就好

#include <cstdio>
#include <string.h>

int ans[205][205];
int I=0;

void swap (int &a,int &b)
{
     a^=b^=a^=b;
}

int main ()
{
    int n,i,j;
    int cas
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值