五星填数--第六届蓝桥杯国赛JAVA B组第二题
2017-08-05 10:05
253 查看
标题:五星填数
如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
请提交表示方案数目的整数,不要填写任何其它内容。
思路:枚举遍历,我们从上到下依次放倒一个数组里,然后判断即可。
有一点就是,要排除旋转和镜像中重复的,不太明白为什么是除以10。。
求解答~~
如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
请提交表示方案数目的整数,不要填写任何其它内容。
思路:枚举遍历,我们从上到下依次放倒一个数组里,然后判断即可。
有一点就是,要排除旋转和镜像中重复的,不太明白为什么是除以10。。
求解答~~
package 总决赛; import java.io.*; public class 五星填数 { static int[]n = new int[10]; static int num = 0; static boolean vis[] = new boolean[12]; static boolean is_same(int[]a){ int b[] = new int[5]; b[0] = a[0]+a[2]+a[5]+a[8]; b[1] = a[0]+a[3]+a[6]+a[9]; b[2] = a[1]+a[5]+a[7]+a[9]; b[3] = a[4]+a[6]+a[7]+a[8]; b[4] = a[1]+a[2]+a[3]+a[4]; for(int i=0;i<5;i++) for(int j=i;j<5;j++){ if(b[i] != b[j]) return false; } return true; } static void dfs(int[]a,int d){ if(d >= 10){ if(is_same(a)) num++; return; } for(int i=1;i<=12;i++){//1-12数字 if(i == 7 || i == 11) continue; if(!vis[i-1]){ a[d++] = i; vis[i-1] = true; dfs(a,d); d--; vis[i-1] = false; } } } public static void main(String[] args) { // TODO Auto-generated method stub dfs(new int[10],0); for(int i=0;i<12;i++){ vis[i] = false; } System.out.print(num/10); } }
相关文章推荐
- 蓝桥杯java第六届决赛第二题--五星填数
- 居民集会--第六届蓝桥杯国赛JAVA C组第六题
- 蓝桥杯第六届国赛JAVA真题----奇怪的数列
- 蓝桥杯第六届国赛JAVA真题----密文搜索
- 2018年第八届蓝桥杯 JavaB组国赛 第二题 生命游戏 解答
- 蓝桥杯第六届国赛JAVA真题----切开字符串
- 表格计算--第六届蓝桥杯国赛 JAVA B组第五题
- 蓝桥杯第六届国赛JAVA真题----表格计算
- 第八届蓝桥杯国赛Java b组 第二题
- 显示二叉树--第六届蓝桥杯国赛JAVA B组第三题
- 【蓝桥杯第六届javaB组国赛】表格计算
- 生成回文数 --第六届蓝桥杯国赛JAVA C组
- 2016 蓝桥杯 国赛 JAVA A组第二题 凑平方数
- 第八届蓝桥杯国赛Java b组 第四题
- 蓝桥杯java第七届决赛第二题--反幻方
- 第八届蓝桥杯JAVAB组第二题
- 算法笔记_119:蓝桥杯第六届省赛(Java语言A组)试题解答
- 蓝桥杯 第六届决赛 奇怪的数列 JAVA
- 第七届蓝桥杯大赛个人赛省赛(软件类)java语言B组第二题:生日蜡烛
- 算法笔记_208:第六届蓝桥杯软件类决赛真题(Java语言A组)