标题: 幻方填空

幻方是把一些数字填写在方阵中,使得行、列、两条对角线的数字之和都相等。

欧洲最著名的幻方是德国数学家、画家迪勒创作的版画《忧郁》中给出的一个4阶幻方。

他把1,2,3,...16 这16个数字填写在4 x 4的方格中。

如图p1.jpg所示,即:

16 ?  ?  13

?  ?  11 ?

9  ?  ?  *

?  15 ?  1

表中有些数字已经显露出来,还有些用?和*代替。

请你计算出? 和 * 所代表的数字。并把 * 所代表的数字作为本题答案提交。

答案是一个整数,请通过浏览器直接提交该数字。

注意:不要提交解答过程,或其它辅助说明类的内容。

思路:接着振兴中华的思路,从(0,0)的位置开始走,走到(3,3)是结束。在走的过程中不是统计,从起点走到终点有多少种走法。而是判断这个非数值的位置上(? *),放非图片中出现的数字,能不能满足题意。即每行每列每条对角线上的值都相等。

当dfs从(0,0)走到(3,3),过程中不在图片的中存在的1----16的数字已经填了上去,走到结尾的时候,就要测试是否满足题意,满足就输出。

dfs是一个试探的过程,这个方法行不行,不行就再换一种方法,直到当某一种解法存在且满足题意的时候,程序的使命,也就完成了。

过程:起始位置到终点dfs-->过程中在非数字位置上放数字-->放的这些数字是不重复的且满足在1--16中且不是图片上出现的数字-->走到结尾的时候检查放的这些数字是否满足题意-->满足题意就输出-->程序结束。

#include

#include

int a[4][4]= {16,0,0,13,0,0,11,0,9,0,0,0,0,15,0,1};    //如图所示幻方数据

int b[10]= {2,3,4,5,6,7,8,10,12,14};    //图片中没有的数字。

int c[10]= {0};    //做标记,这个数用了就在对应的位置上标记为1。

int ce() {    //检查每行每列每条对角线的值是否相同。

int i,j;

int sum1=0,sum2=0;

for(i=0; i<4; i++) {

for(j=0; j<4; j++) {

sum1+=a[i][j];

sum2+=a[j][i];

}

if(sum1!=34||sum2!=34) {

return 0;

}

sum1=0;

sum2=0;

}

for(i=0; i<4; i++) {

sum1+=a[i][i];

}

for(i=0,j=3; i<4&&j>=0; i++,j--) {

sum2+=a[i][j];

}

if(sum1!=34||sum2!=34) {

return 0;

}

return 1;

}

void print() {    //输出函数。

int i,j;

for(i=0; i<4; i++) {

for(j=0; j<4; j++) {

printf("%3d ",a[i][j]);

}

printf("\n");

}

printf("\n");

}

void dfs(int x,int y) {

int i;

if(x==4) {    //结尾,因为搜索的过程是从左到右,再到下一行,是通过一个小技巧完成的。当x=3的时候是第四行,第四行搜索完成到了第五行(x=4)就结束,前四行都走完了。走到头了。

if(ce()) {

print();

exit(0);

}

return ;

}

if(a[x][y]==0) {    //将问号 星号 设置为0 便于搜索  是零就是说应该填数的。

for(i=0; i<10; i++) {    //将b数组中i位置上的数,放在a[x][y]内,循环进行十次, a[x][y]==0这个位置上放十个数都放一边,所有的 a[x][y]==0都将b数组里面的数放过来一遍  历遍。

if(x==1&&a[0][0]+a[0][1]+a[0][2]+a[0][3]!=34)return ;    //当x=1的时候,第一行已经都有数字了,判断这些数字是否等于三十四,从1加到16除以4等于34,不等于三十四就结束这个可能,因为这个可能肯定不满足题意。

if(x==2&&a[1][0]+a[1][1]+a[1][2]+a[1][3]!=34)return ;

if(x==3&&a[2][0]+a[2][1]+a[2][2]+a[2][3]!=34)return ;

if(!c[i]) {    //选中b[i]这个位置,之后c[i]=1就是表明这个位置的数字已经使用过了,不能再用。

c[i]=1;

a[x][y]=b[i];    //把b[i]的上的数字放在这个a[x][y]上。

dfs(x+(y+1)/4,(y+1)%4);    //小技巧,举几个示例  (3,2)  (2,2)  套这个公式,推推是等价的。

c[i]=0;//这个可能已经尝试过了,进行下一种可能,在进行在一种可能的时候,要把数据还原到未使用之前。

a[x][y]=0;

}

}

}

else

{

dfs(x+(y+1)/4,(y+1)%4);    //图片上有数字,直接走过去。

}

}

int main() {

dfs(0,0);    //深度优先搜索,起始位置。

return 0;

}

四阶幻方c语言编程,13年 第四届 蓝桥杯C语言C组 第4题 幻方填空相关推荐

  1. 金蝉素数c语言,算法笔记_204:第四届蓝桥杯软件类决赛真题(Java语言C组)

    前言:以下代码仅供参考,若有错误欢迎指正哦~ 1好好学习 汤姆跟爷爷来中国旅游.一天,他帮助中国的小朋友贴标语.他负责贴的标语是分别写在四块红纸上的四个大字:"好.好.学.习".但 ...

  2. 标题 错误票据c语言,内含答案的 -- 2013蓝桥杯C语言本科组B.doc

    内含答案的 -- 2013蓝桥杯C语言本科组B.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们 ...

  3. 【解题报告+通法】_九宫幻方 蓝桥杯 2017年C组第八题(dfs解法)

    题目描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. 三阶幻方又被 ...

  4. 2013第四届蓝桥杯C/C++ B组省赛

    第一题 题目标题: 高斯日记大数学家高斯有个好习惯:无论如何都要记日记.他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高 ...

  5. 2013年第四届蓝桥杯C/C++B组省赛题目及答案 1

    一.高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的 ...

  6. 3a三次方h c语言表达式,希尔伯特曲线——第八届蓝桥杯C语言B组(国赛)第三题...

    原创 标题:希尔伯特曲线 希尔伯特曲线是以下一系列分形曲线 Hn 的极限.我们可以把 Hn 看作一条覆盖 2^n × 2^n 方格矩阵的曲线,曲线上一共有 2^n × 2^n 个顶点(包括左下角起点和 ...

  7. 第四届蓝桥杯省赛javaB组试题解析

    1.标题: 世纪末的星期曾有邪教称1999年12月31日是世界末日.当然该谣言已经不攻自破.还有人称今后的某个世纪末的12月31日,如果是星期一则会....有趣的是,任何一个世纪末的年份的12月31日 ...

  8. 2013年第四届蓝桥杯C/C++ A组国赛 —— 第五题:网络寻路

    标题:网络寻路 X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一共有多少 ...

  9. 2013年第四届蓝桥杯C/C++ A组国赛 —— 第四题:约数倍数选卡片

    标题:约数倍数选卡片 闲暇时,福尔摩斯和华生玩一个游戏: 在N张卡片上写有N个整数.两人轮流拿走一张卡片.要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数.例如,某次福尔摩斯拿走的卡片上写着数字 ...

最新文章

  1. 设计模式 之美 -- 工厂方法模式
  2. Apache Tomcat/7.0.47
  3. Redis进阶实践之十六 Redis大批量增加数据
  4. c# datetime._C#| DateTime.Year属性与示例
  5. 关于RUP的一点见解,针对于近期的面向对象方法课程
  6. jaxen.jar下载地址
  7. 打开计算机硬盘有声音,电脑硬盘有响声总吱吱响的解决方法
  8. 【电路设计】尖峰电压与浪涌电流
  9. java获取docx_java使用poi读取doc和docx文件的实现示例
  10. 英语听力采用计算机化考试,高考英语听力机考12问——访北京教育考试院有关负责人...
  11. 最短路径算法 | Bellman-Ford Algorithm
  12. Spring Security登录成功后重定向到登陆前页面 解决方案
  13. 如何升级MacOS自带的PHP到指定版本(5.3-7.3)
  14. 中国科学院大学计算机考研好考吗,中国科学院大学考研难吗?一般要什么水平才可以进入?...
  15. CodeForces - 332B  Maximum Absurdity   前缀和
  16. Error creating bean with name ‘endpoint‘ defined in class path resource [.../CxfConfig.class]
  17. Android Studio打包APK安装失败:应用是非正式版本,当前设备不支持安装
  18. Java和开源GIS平台
  19. 三网合一我们该做些什么?
  20. c语言程序设计项目实训总结,c语言程序设计实训总结.docx

热门文章

  1. 2.5维电子地图关键技术研究与实现
  2. IDEA改变文件夹显示方式
  3. linux C语言多线程 轻进程 LWP:Light Weight Process
  4. 都市丽人“正青年”设计大赛结果出炉 感召中国新生设计力量
  5. 使用TextPaint实现自由加粗字体:BoldTextView,支持中粗
  6. 【土旦】在vue filters中 优雅的使用对象的key、value来替换 if switch多重判断简化流程...
  7. (转)程序员键盘推荐
  8. 【报告分享】2021母婴行业白皮书-巨量引擎(附下载)
  9. Trainning 1 DAY
  10. 来自Java程序员的Python新手入门小结