标题:六角幻方把 1 2 3 ... 19 共19个整数排列成六角形状,如下:* * ** * * ** * * * ** * * * * * *要求每个直线上的数字之和必须相等。共有15条直线哦!再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.png】,黄色一行为所求。请你填写出中间一行的5个数字。数字间用空格分开。这是一行用空格分开的整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字等)

思路:由于这个数据量比较大,所以需要提前剪枝,不然可能半天都运行不出来,gg了。

public class _2 {  static int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,  17, 18, 19 };// 总集  static int[] book = new int[20];// 标示集  static int[] res = new int[a.length];// 结果集  public static void main(String[] args) {  dfs(0);  }  public static void dfs(int step) {  if (step == 1) {// 递归过程中,对函数进行剪枝,而且尽量在递归前期就剪掉,剪得越早,越快出结果  if (res[0] != 15)  return;  }  if (step == 2) {  if (res[1] != 13 && res[1] != 15)  return;  }  if (step == 7) {  if (28 + res[2] != res[3] + res[4] + res[5] + res[6])  return;  }  if (step == 8) {  if (28 + res[2] != 15 + res[3] + res[7])  return;  }  if (step == 12) {  if (28 + res[2] != res[7] + res[8] + res[9] + res[10] + res[11])  return;  if (28 + res[2] != res[2] + res[6] + res[11])  return;  }  if (step == 13) {  if (28 + res[2] != 13 + res[4] + res[8] + res[12])  return;  }  if (step == 16) {  if (res[12] + res[13] + res[14] + res[15] != res[2] + 28)  return;  if (28 + res[2] != 13 + res[5] + res[10] + res[15])  return;  }  if (step == 17) {  if (28 + res[2] != res[7] + res[12] + res[16])  return;  if (28 + res[2] != res[2] + res[5] + res[9] + res[13] + res[16])  return;  }  if (step == 19) {// 结果集满,进行具体判断结果是否合法操作  int s1 = res[2] + res[6] + res[11];  int s2 = res[1] + res[5] + res[10] + res[15];  int s3 = res[0] + res[4] + res[9] + res[14] + res[18];  int s4 = res[3] + res[8] + res[13] + res[17];  int s5 = res[7] + res[12] + res[16];  int s6 = res[0] + res[1] + res[2];  int s7 = res[3] + res[4] + res[5] + res[6];  int s8 = res[7] + res[8] + res[9] + res[10] + res[11];  int s9 = res[12] + res[13] + res[14] + res[15];  int s10 = res[16] + res[17] + res[18];  int s11 = res[0] + res[3] + res[7];  int s12 = res[1] + res[4] + res[8] + res[12];  int s13 = res[2] + res[5] + res[9] + res[13] + res[16];  int s14 = res[6] + res[10] + res[14] + res[17];  int s15 = res[11] + res[15] + res[18];  // 十五条直线上的数字和必须相等并且满足题中条件,15和13位置固定  if (res[0] == 15 && res[1] == 13 && s1 == s5 && s1 == s2  && s1 == s3 && s1 == s4 && s1 == s6 && s1 == s7 && s1 == s8  && s1 == s9 && s1 == s10 && s1 == s11 && s1 == s12  && s1 == s13 && s1 == s14 && s1 == s15) {  System.out.println(res[7] + " " + res[8] + " " + res[9] + " "  + res[10] + " " + res[11]);// 输出结果  }  return;// 递归出口  }  for (int i = 0; i < a.length; i++) {// 遍历总集  if (book[a[i]] == 0) {// 判断当前元素是否被使用过  res[step] = a[i];// 使用当前元素,加入res结果集  book[a[i]] = 1;// 将当前元素标记为已使用  dfs(step + 1);// 递归调用自身,step为下一个元素元素下标  book[a[i]] = 0;// 递归结束后至此,回溯,回收当前元素,标记为未使用  }  }  }
}

蓝桥杯java第五届决赛第二题--六角幻方相关推荐

  1. 蓝桥杯java第四届决赛第二题--连续奇数和

    标题:连续奇数和小明看到一本书上写着:任何数字的立方都可以表示为连续奇数的和.比如:2^3 = 8 = 3 + 53^3 = 27 = 7 + 9 + 114^3 = 64 = 1 + 3 + ... ...

  2. 蓝桥杯java第五届决赛第一题--国王的遗产

    标题:国王的遗产X国是个小国.国王K有6个儿子.在临终前,K国王立下遗嘱:国王的一批牛作为遗产要分给他的6个儿子.其中,大儿子分1/4,二儿子1/5,三儿子1/6,....直到小儿子分1/9.牛是活的 ...

  3. 第九届蓝桥杯java B组—第二题方格计数(详细介绍)

    文章目录 1.题目如下 2.解题思路 3.详细讲解 4.代码实例 5.答案 最近正在练习蓝桥杯的习题,做到第九届篮球杯的第二题(方格计数)的时候,发现没有思路,就上网上查了一些资料,感觉说的不够详细, ...

  4. 蓝桥杯java第五届决赛第四题--排列序数

    标题:排列序数如果用a b c d这4个字母组成一个串,有4!=24种,如果把它们排个序,每个串都对应一个序号:abcd 0abdc 1acbd 2acdb 3adbc 4adcb 5bacd 6ba ...

  5. 蓝桥杯java第五届决赛第三题--格子放鸡蛋

    标题:格子放鸡蛋X星球的母鸡很聪明.它们把蛋直接下在一个 N * N 的格子中,每个格子只能容纳一枚鸡蛋.它们有个习惯,要求:每行,每列,以及每个斜线上都不能有超过2个鸡蛋.如果要满足这些要求,母鸡最 ...

  6. 蓝桥杯java第四届决赛第一题--猜灯谜

    标题:猜灯谜A 村的元宵节灯会上有一迷题:请猜谜 * 请猜谜 = 请边赏灯边猜小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字.请你用计算机按小明的思路算一下,然后提交"请猜谜& ...

  7. 蓝桥杯java第三届决赛第一题--星期日

    [结果填空] (满分5分)1949年的国庆节(10月1日)是星期六. 今年(2012)的国庆节是星期一.那么,从建国到现在,有几次国庆节正好是星期日呢?只要答案,不限手段!可以用windows日历,w ...

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

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

  9. 2013第四届蓝桥杯Java组省赛题解析

    2013第四届蓝桥杯Java组省赛题解析 目录 第一题:高斯日记 第二题:马虎的算式 第三题:第39级台阶 第四题:黄金连分数 ​第五题:前缀判断 第六题:三部排序 ​第七题:错误票据 第八题:翻硬币 ...

最新文章

  1. 系统清理工具(Wise Care 365)绿色版
  2. 独家 | 人工智能不能忽视符号逻辑以及原因
  3. Oracle 数据库EM访问多个Instance
  4. 服务器上的VGA切换原理,VGA切换器使用方法和常见问题说明
  5. CentOS 7 Root用户密码重置 2017-04-02
  6. 【收藏】使用springboot构建rest api远程提交spark任务
  7. 使用 HTTP 缓存防止不必要的网络请求
  8. T-SQL像数组一样处理字符串、分割字符串,遍历数组
  9. python中的@property(get与set作用
  10. 解析word文件的简单实现
  11. 第一章 DHT11温湿度传感器的使用
  12. word参考文献乱码问题
  13. 数据时代的大数据思维特征,主要有哪些?
  14. tukey是什么意思_turkey中文是什么意思怎么读(英语里这个TURKEY这个多义词解析)...
  15. 苦难是人生最大的财富
  16. 从 B 站火到 GitHub,国人开发者又一黑科技面世!
  17. Java猜数字大小游戏
  18. 深入理解 CSS 中的行高与基线
  19. STM32_HAL库—PWM产生指定个数
  20. Human-Level Control Through Deep Reinforcement Learning论文解读

热门文章

  1. C++又一坑:动态链接库中的全局变量
  2. STM32系统学习——DMA(直接储存器访问)
  3. 风力等级表(供参考)
  4. 攻防世界Reverse第一题Hello, CTF
  5. [ARM-assembly]-ARMv8 A64 Quick Reference
  6. optee中的thread_vector_table线程向量表
  7. JUSTCTF校赛安卓wp
  8. 2020-11-6(简述html)
  9. 某office前台任意文件上传漏洞分析
  10. SQLite 数据库注入总结