第七届蓝桥杯Java B组-剪邮票
2018-03-27 11:26
253 查看
import java.util.Arrays; public class Main{ private static final int NEED = 5; private static final int ROW = 5; private static final int COL = 6; private static boolean [][]map = new boolean[ROW][COL]; private static int cnt = 0; public static void judgeConnect(String s) { int sum = 0, flag = 0, sign = 0; for(int i = 1; sum != 5 && i < ROW - 1; ++i) { for(int j = 1; sum != 5 && j < COL - 1; ++j) { if(map[i][j]) { ++sum; if(!map[i - 1][j] && !map[i + 1][j] && !map[i][j - 1] && !map[i][j + 1]) return; else if(sign < 2){
//如果发现此时sign已经大于2了,说明已经具备可以连成图的条件,就不必再判断,提高效率
flag = 0; if(map[i - 1][j]) ++flag; if(map[i + 1][j]) ++flag; if(map[i][j - 1]) ++flag; if(map[i][j + 1]) ++flag; /** * 这一句是特判,会出现十字架的情况,十字架只有一个方块与其他四个相连, * 其余四个都没有和另外两个方块相连。这就的我的解题思路的漏洞。没有写这句,打印114;最后又补上的这句 * */ if(flag == 4) { sign = 4; sum = 5; } /** * 解题的思路: * 通过观察图形发现,如果是五个方块相连的图形,至少要有两个方块的周围与另外两个方块相邻。 * 这包括:1、有三个方块与另外两个相连的,如可以拉成一条直线型的;如样例中:2、6、7、11、12中的6、7、11 * 2、有两个方块与另外两个相连的,如样例中:3、5、6、7、10的6、7两个方块 * */ if(flag >= 2) ++sign; } } } } if(sign >= 2)++cnt; } public static void fillNum(String s) { if(s.contains("A")) map[1][1] = true; if(s.contains("B")) map[1][2] = true; if(s.contains("C")) map[1][3] = true; if(s.contains("D")) map[1][4] = true; if(s.contains("E")) map[2][1] = true; if(s.contains("F")) map[2][2] = true; if(s.contains("G")) map[2][3] = true; if(s.contains("H")) map[2][4] = true; if(s.contains("I")) map[3][1] = true; if(s.contains("J")) map[3][2] = true; if(s.contains("K")) map[3][3] = true; if(s.contains("L")) map[3][4] = true; judgeConnect(s); } /** * 递归的写法,从13个方块中随机抽取5个方块。写法抄袭了这题的上一题的填空写法。 * 该段代码改编来自:蓝桥杯第七届Java B组的填空题 * */ public static void fun(int []arr, int pos, int n, String s) { if(pos == arr.length) { if(0 == n) { for(boolean []item: map)Arrays.fill(item, false); fillNum(s); } return; } String str = s; for(int i = 0; i <= arr[pos]; ++i) { fun(arr, pos + 1, NEED - str.length(), str); str += (char)(pos + 'A'); } } public static void main(String[] args) { int []arr= { 1,1,1,1,1,1,1,1,1,1,1,1 }; fun(arr, 0, NEED, ""); System.out.println(cnt); } }
相关文章推荐
- 蓝桥杯-第七届省赛javaA组-剪邮票
- 蓝桥杯第七届省赛JAVA真题----剪邮票
- 第七届蓝桥杯 剪邮票 java
- 蓝桥杯-第七届Java语言B组-剪邮票
- 蓝桥杯-第七届省赛javaA组-剪邮票
- 剪邮票-蓝桥杯第七届javaA组--12元素选5元素不重复
- 第七届蓝桥杯决赛JavaB组第四题 路径之谜
- 蓝桥杯-第七届省赛javaB组-方格填数
- 第七届蓝桥杯JavaA组第二题生日蜡烛
- 2016 第七届蓝桥杯 Java B组真题整理(附答案)
- 第七届蓝桥杯决赛JavaA组第六题_生成树计数
- 蓝桥杯第七届省赛java A组
- 第七届蓝桥杯【省赛试题7】剪邮票
- 第七届蓝桥杯JAVAb组算煤球答案
- 第七届蓝桥杯省赛JAVA B组-压缩变换
- [蓝桥杯] 第七届 C/C++ B组 剪邮票 ---- DFS
- 蓝桥杯-第七届省赛javaA组-生日蜡烛
- 第七届蓝桥杯个人赛省赛(Java B组)第四题
- 第七届蓝桥杯省赛剪邮票
- 第七届蓝桥杯 省赛 JavaB组 抽签