五星填数-蓝桥杯决赛
来源:互联网 发布:淘宝的安逸猿 编辑:程序博客网 时间:2024/05/21 09:19
题目描述
标题:五星填数
如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
请提交表示方案数目的整数,不要填写任何其它内容。
简单分析
典型暴力,不过由于太多的数,所以用for不是太好的选择
可以用深度优先dfs
最后/10是由于镜像与旋转的原因,对比那个反幻方,可以看出除的那个数和边的个数有关 /(边的个数*2)
代码奉上
public class e2 { static int[] data = { 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 }; static int[] res = new int[data.length]; static boolean[] vis = new boolean[data.length]; static int count = 0; public static void dfs(int n) { if (n == data.length) { if (isOk()) { count++; } } else { for (int i = 0; i < data.length; i++) { if (vis[i]) continue; vis[i] = true; res[n] = data[i]; dfs(n + 1); vis[i] = false; } } } // 判断是否符合情况 private static boolean isOk() { int add[] = new int[5]; add[0] = res[0] + res[2] + res[5] + res[7]; add[1] = res[0] + res[3] + res[6] + res[9]; add[2] = res[1] + res[2] + res[3] + res[4]; add[3] = res[1] + res[5] + res[8] + res[9]; add[4] = res[4] + res[6] + res[8] + res[7]; for (int i = 0; i < add.length - 1; i++) { for (int j = i + 1; j < add.length; j++) { if (add[j] != add[i]) return false; } } return true; } public static void main(String[] args) { dfs(0); System.out.println(count / 10); }}
运行结果 :12
阅读全文
0 0
- 五星填数-蓝桥杯决赛
- 蓝桥杯第六届决赛:五星填数
- 蓝桥杯java第六届决赛第二题--五星填数
- 蓝桥决赛---五星填数
- 五星填数_蓝桥杯
- 蓝桥杯 历届试题 五星填数
- 五星填数--回溯
- dfs 五星填数
- 五星填数
- 蓝桥杯决赛 方块填数
- 2015第七届蓝桥杯决赛C语言C组--五星填数(DFS)
- 历届试题 五星填数
- 蓝桥杯题 五星填数(dfs)
- 蓝桥杯决赛之方块填数
- 2015年蓝桥杯JavaB组五星填数
- 15决赛方格填数
- 蓝桥杯 五角填数 2015年JavaB组决赛试题
- 五星填数与深度优先搜索回溯思想
- 杂篇之1-字符串与int类型的相互转化
- Wireless Network(POJ-2236)
- 学期小目标
- 初识Android ConstraintLayout
- 采用Stanford CoreNLP实现英文单词词形还原
- 五星填数-蓝桥杯决赛
- C++ free与delete区别
- Lynda.com学习体验之Become a Python Programmer
- 实验2 启动程序设计
- lxml 中文乱码解决
- 采用Stanford Parser进行中文语法解析
- android的DrawerLayout使用
- C++中的4种运算符转化以及它们的不同点
- 安卓v7包中的RecyclerView的基本使用