2014 蓝桥杯 预赛 c/c++ 本科B组 第七题:六角填数【暴力】or【DFS】
2015-04-09 12:48
357 查看
标题:六角填数
下图所示六角形中,填入1~12的数字。使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
蓝桥杯填空题只要结果。
方法一:直接暴力
#include "cstdio" #include "cstring" #include "iostream" #include "algorithm" using namespace std; int main (){ int a[13]; for(int i=0;i<12;++i) a[i]=i+1; while(next_permutation(a,a+12)){ int t=a[1]+a[2]+a[3]+a[4]; if(a[0]==1 && a[1]==8 && a[11]==3 && t==a[0]+a[2]+a[5]+a[7] && t==a[0]+a[3]+a[6]+a[10] && t==a[7]+a[8]+a[9]+a[10] && (a[1]+a[5]+a[8]+a[11])==(a[4]+a[6]+a[9]+a[11])) printf("%d\n",a[5]); } return 0; }
方法二:DFS
#include <cstdio> #include <cstring> int a[12]; bool vis[12]; void dfs(int k){ int i; int t=a[1]+a[2]+a[3]+a[4]; if(k==12 && a[0]==1 && a[1]==8 && a[11]==3 && t==a[0]+a[2]+a[5]+a[7] && t==a[0]+a[3]+a[6]+a[10] && t==a[1]+a[5]+a[8]+a[11] && t==a[4]+a[6]+a[9]+a[11] && t==a[7]+a[8]+a[9]+a[10] && a[7]+a[8]+a[9]+a[10]==a[0]+a[3]+a[6]+a[10]){ printf("%d\n",a[5]); return ; } for(i=1;i<=12;++i){ if(!vis[i]){ vis[i]=1; a[k]=i; dfs(k+1); vis[i]=0; a[k]=0; } } } int main (){ memset(vis,0,sizeof(vis)); memset(a,0,sizeof(a)); dfs(0); return 0; }
相关文章推荐
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第三题:李白打酒【暴力】or【DFS】
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第7题:六角填数(12')
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第7题:六角填数(12')
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第三题:李白打酒 (8' )
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第三题:李白打酒 (8' )
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第六题:奇怪的分式(11')
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第三题:李白打酒 (8' )
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第八题:蚂蚁感冒(10')(4.9更新)
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第四题:史丰收速算(7' )
- 蓝桥杯 2014本科C++ B组 地宫取宝 DFS+记忆化搜索
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第一题:啤酒和饮料(4' )
- 2014第五届蓝桥杯预赛试题本科c++李白打酒
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第九题:地宫取宝(12')
- 蓝桥杯 2014 本科B组 c++ 预赛 第九题 地宫取宝
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第二题:切面条(5' )
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第四题:史丰收速算(7' )
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第三题:李白打酒 (8' )
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第十题:小朋友排队(19')(4.9修订)
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第六题:奇怪的分式(11')
- 【DFS填数】(2014)第五届蓝桥杯省赛 C/C++ B组 题解(第七题)