标题:四阶幻方

把1~16的数字填入4x4的方格中,使得行、列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方。

四阶幻方可能有很多方案。如果固定左上角为1,请计算一共有多少种方案。
比如:
  1  2 15 16
 12 14  3  5
 13  7 10  4
  8 11  6  9

以及:
  1 12 13  8
  2 14  7 11
 15  3 10  6
 16  5  4  9
 
就可以算为两种不同的方案。

请提交左上角固定为1时的所有方案数字,不要填写任何多余内容或说明文字。

416

解析:四阶幻方,行、列、对角线之和为 (1+2+...+16)/4 = 34。

n阶幻方,行、列、对角线之和为(1+n)/2n。

直接进行dfs,然后判断是否符合条件,程序运行时间很长,需要在深度遍历过程中进行判断。

例如:

1、第一行全部有值后判断,不符合条件立刻返回,不再继续向下遍历;

2、第一行符合要求,向下遍历,第二行全部有值后判断,不符合要求立刻返回,不再继续向下遍历;

3、第二行也符合要求,向下遍历,第三行全部有值后判断,不符合要求立刻返回,不再继续向下遍历;

4、第三行也符合要求,向下遍历,得到整个排列,判断行、列、对角线和是否符合要求,符合计数加一。

#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int arr[16] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int count = 0;
int ans[4][4];//方格 //将排列放入方格内
void arr2ans()
{int temp = 0;for(int i = 0; i < 4; i++)for(int j = 0; j < 4; j++){ans[i][j] = arr[temp];temp++;}
}
//判断是否符合条件
bool is_ok()
{int sum;//对角线 sum = ans[0][0] + ans[1][1] + ans[2][2] + ans[3][3];if(sum != 34) return 0;sum = ans[0][3] + ans[1][2] + ans[2][1] + ans[3][0];if(sum != 34) return 0;for(int i = 0; i < 4; i++){//行 sum = ans[i][0] + ans[i][1] + ans[i][2]+ ans[i][3];if(sum != 34)return 0;}for(int j = 0; j < 4; j++){//列 sum = ans[0][j] + ans[1][j] + ans[2][j]+ ans[3][j];if(sum != 34)return 0;}return 1;
}
void permutation(int arr[],int begin,int end)
{if(begin == end){//全部放置好了,其中前三行符合要求 arr2ans();if(is_ok()){count++;for(int i = 0; i < 4; i++){for(int j = 0; j < 4; j++){cout<<ans[i][j]<<" ";}cout<<endl;}cout<<endl;}return; }if(begin == 4){// 0,1 ,2 3 第一行放置好了 int sum = arr[0] + arr[1] + arr [2] + arr[3];if(sum != 34) return;  }if(begin == 8){//4,5,6,7 第二行也放置好了,行一符合要求 int sum = arr[4] + arr[5] + arr[6] + arr[7];if(sum != 34) return; }if(begin == 12){//8,9,10,11 第三行也放置好了,行一行二符合要求 int sum = arr[8] + arr[9] + arr[10] + arr[11];if(sum != 34) return; } for(int i = begin; i <= end; i++){ swap(arr[i],arr[begin]);permutation(arr,begin+1,end);swap(arr[i],arr[begin]);}}
int main(int argc, char** argv) {permutation(arr,1,15);cout<<count<<endl;return 0;
}

(六决)蓝桥真题 四阶幻方相关推荐

  1. 蓝桥杯赛题——四阶幻方

    标题:四阶幻方 把1~16的数字填入4x4的方格中,使得行.列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方. 四阶幻方可能有很多方案.如果固定左上角为1,请计算一共有多少种方案. 比如: ...

  2. 【蓝桥真题3】蓝桥改革变难,想进国赛这些能力你可缺一不可

    ⭐️引言⭐️ 大家好,我是执梗.蓝桥杯省赛的倒计时也就剩下一个月的时间了,如果练过近七八年的真题的小伙伴,很明显地能感觉到蓝桥杯的难度越来越大,虽然遥遥还比不上ACM,但它的平均难度正以明显地速度增加 ...

  3. 【蓝桥真题7】贴吧车队作弊?应对线上考和双填趋势,我们该如何备考?

    ⭐️引言⭐️ 大家好,我是执梗.还有一个星期蓝桥杯就要开赛了,但是现在却风起云涌,由于疫情的原因,绝大多数地区已经改为线上考试.理所当然,在这种趋势下,出现作弊行为肯定是无法避免的.甚至在贴吧都沦陷成 ...

  4. 【蓝桥真题1】这道用了7个for循环的蓝桥真题,让舍友哭着跑出考场【内附原题资源】

    ⭐️引言⭐️                 大家好,我是执梗,蓝桥杯的报名快接近尾声,如果有兄弟还没报名不了解比赛,缺少视频讲解和真题资源的一定要阅读一下我的这篇蓝桥全解析--蓝桥全解析.为了帮助兄 ...

  5. 【蓝桥真题4】练练填空就想进国赛?拿下大题才能让你真正有底气(蓝桥31日冲刺打卡)

    ⭐️引言⭐️ 大家好啊,我是执梗.上次出的蓝桥真题三系列受到了很多同学的喜爱,大家问了我许多关于蓝桥杯的问题,我也一一解答了.但我发现起码一半以上的同学存在一个误区--我光靠选择题能拿个省一进国赛吗? ...

  6. 蓝桥杯第六届决赛真题大全解(java版本)

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 >蓝桥杯第六届决赛第一题[(详情(分机号))](http://blog.csdn.net ...

  7. java判断44数组是否是4阶幻方_2015蓝桥杯决赛Java A组 第二题--四阶幻方

    //把1~16的数字填入4x4的方格中,使得行.列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方. // //四阶幻方可能有很多方案.如果固定左上角为1,请计算一共有多少种方案. //比如: ...

  8. 【蓝桥真题5】带三百人训练了十天精选蓝桥真题,看看他们都练些什么(三门语言题解)

    ⭐️引言⭐️ 大家好啊,我是执梗.最近一周多都没有更新文章了,因为确实是非常忙,在上篇文章了一下开启了蓝桥打卡31日的活动.每天忙着群里管理解答,统计打卡,寻找真题,根本没有时间更新文章.每天也过的非 ...

  9. 【蓝桥真题6】三十块的蓝桥省赛模拟真题,做的大一都直呼上当(文末PDF原题)

    ⭐️引言⭐️ 大家好,我是执梗.这几天蓝桥杯的省赛模拟赛正在开展,报名费一人三十元(没错又是丰收的结节,开始割韭菜了).昨天抽空做了一下,虽然没有出成绩,但是难度确实不高,和这两届的真题难度比起来有点 ...

最新文章

  1. MySQL 用 limit 为什么会影响性能?
  2. JQuery面试题1
  3. 漫谈设计模式--3分钟理解桥接模式:笔和画的关系
  4. CISCO WLC架构及配置介绍
  5. java char指针数组_简单总结C语言中各种类型的指针的概念
  6. luogu P2018 消息传递
  7. pythonchallenge之C++学习篇-01
  8. (2022最新)Java毕业设计参考题目-题目新颖(值得收藏)
  9. Java设计模式学习记录-模板方法模式
  10. 基于FlexRay总线的汽车冗余线控转向系统的可靠性(FEMA)分析
  11. Servlet实现登录带有验证码验证案例
  12. 相片打印机原理_【视界网】什么是便携式打印机以及工作原理有哪些呢?
  13. 微信小程序开发工具的目录结构
  14. 伤感的英文单词[转帖]
  15. MNE初学入门(一)
  16. python随机分组的思路_「Python」每日一练:学生学习小组分组程序
  17. VMware虚拟磁盘VMDK格式说明书1.1---3 The Descriptor File描述文件
  18. ADAS/AD控制器模块开发11 - UDS与配置、校准
  19. gitee码云仓库创建教程
  20. rhel8安装docker-ce

热门文章

  1. set_false_path 与 set_disable_timing 的区别
  2. 夺命雷公狗---无限极分类NO1
  3. linux内核串口日志抓取-minicom工具使用方法
  4. 吴津津 我的一点项目管理经验!
  5. 315前夕的电商服务战:苏宁30365计划所为何来?
  6. 【电商】mysql 建表的一些规则 和注意事项
  7. Fomo3D二轮大奖开出,黑客获奖,机制漏洞成游戏没落主因
  8. 计算机网路中CDP,LLDP,STP的详解
  9. DCDC开关电源学习BUCK电路(2)
  10. UI动效设计工具都有哪些?