第七届蓝桥杯JavaB组——第6题方格填数
解决方案:利用全排列和递归
使用Java中的集合API:HashMap ArrayList

package com.lzp.lanqiaoseven.p6;
import java.util.*;
/**
* @Author LZP
* @Date 2021/2/26 14:38
* @Version 1.0
*
*
方格填数
如下的10个格子
+--+--+--+
| | | |
+--+--+--+--+
| | | | |
+--+--+--+--+
| | | |
+--+--+--+
(如果显示有问题,也可以参看本篇博文开头)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
全排列
*/
public class Main {
private static int[] arr = new int[11];
/**
* 辅助数组
*/
private static int[] dp = new int[10];
private static int count;
private static Map<Integer, List<Integer>> map = null;
private static List<Integer> list= null;
public static void main(String[] args) {
map = new HashMap<>();
list= new ArrayList<>();
list.add(2);
list.add(4);
list.add(5);
list.add(6);
map.put(1, list);
list= new ArrayList<>();
list.add(1);
list.add(3);
list.add(5);
list.add(6);
list.add(7);
map.put(2, list);
list= new ArrayList<>();
list.add(2);
list.add(6);
list.add(7);
map.put(3, list);
list= new ArrayList<>();
list.add(1);
list.add(5);
list.add(8);
list.add(9);
map.put(4, list);
list= new ArrayList<>();
list.add(1);
list.add(2);
list.add(4);
list.add(6);
list.add(8);
list.add(9);
list.add(10);
map.put(5, list);
list= new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(5);
list.add(7);
list.add(9);
list.add(10);
map.put(6, list);
list= new ArrayList<>();
list.add(2);
list.add(3);
list.add(6);
list.add(10);
map.put(7, list);
list= new ArrayList<>();
list.add(4);
list.add(5);
list.add(9);
map.put(8, list);
list= new ArrayList<>();
list.add(4);
list.add(5);
list.add(6);
list.add(8);
list.add(10);
map.put(9, list);
list= new ArrayList<>();
list.add(5);
list.add(6);
list.add(7);
list.add(9);
map.put(10, list);
division(1);
System.out.println(count);
}
public static void division(int pos) {
if (pos > 10) {
boolean flag = true;
for (int i = 1; i < arr.length; i++) {
List<Integer> values = map.get(i);
for (int j = 0; j < values.size(); j++) {
int temp = arr[values.get(j)];
if (arr[i] - 1 == temp || arr[i] + 1 == temp) {
// 两数连续
flag = false;
break;
}
}
if (!flag) {
break;
}
}
if (flag) {
count++;
}
return;
}
for (int i = 0; i <= 9; i++) {
if (dp[i] == 0) {
dp[i] = 1;
arr[pos] = i;
division(pos + 1);
dp[i] = 0;
}
}
}
}
运行结果:

感悟:一开始总以为各个方格可以填写重复的数,然后用代码实现的时候发现结果好长时间都没运行出来,这时就反过来思考,这毕竟是一个结果填空题,题目应该不至于那么复杂,然后就再试了一下将0~9这10个数字依次不重复的填入所有方格,也就是每个方格的数都不能相同(即每个数只能用一次),最后程序竟然跑出结果来了。于是就去网上看下网友的答案,发现我俩的答案是一样的,我觉得没那么巧,答案应该是没有错,我还是不放心,就再搜了几篇博客再验证一下。终于功夫不负有心人,都对上了哈哈,到此本篇博客也就结束了,同时也希望看到这篇博客的朋友们能一起学习交流,如有错误,请多指正!!!
第七届蓝桥杯JavaB组——第6题方格填数的更多相关文章
- 第七届蓝桥杯JavaB组——第7题剪邮票
题目: 剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示 ...
- 2016年第七届蓝桥杯javaB组 试题 答案 解析
1.煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤 ...
- 第七届蓝桥杯JavaB组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.煤球数量 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第 ...
- 第七届蓝桥杯javaB组真题解析-分小组(第四题)
题目 /* 分小组 9名运动员参加比赛,需要分3组进行预赛. 有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I 下面的程序列出了所有的分组方法. 该程序的正常输出为: ABC DEF G ...
- 第七届蓝桥杯javaB组真题解析-凑算式(第三题)
题目 /* 凑算式 B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见[图1.jpg]) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字. 比 ...
- 第七届蓝桥杯javaB组真题解析-生日蜡烛(第二题)
题目 /* 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始 ...
- 第七届蓝桥杯javaB组真题解析-煤球数目(第一题)
题目 /* 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有 ...
- 第七届蓝桥杯javaB组真题解析-四平方和(第八题)
题目 /* 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1 ...
- 第七届蓝桥杯javaB组真题解析-剪邮票(第七题)
题目 /* 剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色 ...
随机推荐
- Codeforces Round #650 (Div. 3) A. Short Substrings
题目链接:https://codeforces.com/contest/1367/problem/A 题意 给出一个字符串 $t$,找出原字符串 $s$,$t$ 由 $s$ 从左至右的所有长为 $2$ ...
- HDU - 6030 矩阵快速幂 +多组输入快速幂板子
题意:一个项链用n个珠子构成,是一个条而不是一个环,由红和蓝两种颜色构成,要求以任意点为起点向后的素数个珠子中,保证红颜色的大于等于蓝颜色的,问你有多少种方案满足,范围:n(2≤n≤1018) 推导过 ...
- Codeforces Round #304 (Div. 2) C. Basketball Exercise (DP)
题意:给你两个长度相同的数组,每次从两个数组中选数(也可以不选),但是不可以在同一个数组中连续选两次,问能选的最大值是多少? 题解:dp,\(dp[i][0]\)表示第\(i\)个位置不选,\(dp[ ...
- WPF 无法对元素“TextBox”设置 Name 特性值“TB2”
错误信息 无法对元素"TextBox"设置 Name 特性值"TB2"."TextBox"在元素"UserControl1&quo ...
- Matching Engine For Laravel(基于redis的撮合引擎),PHP高性能撮合引擎
Laravel Package for Matching Engine 快速开始 github地址 安装: composer require sting_bo/mengine 复制配置文件: php ...
- MySQL5.6 与 MySQL5.7 的区别
目录 编译安装区别 初始化的区别 其他区别 编译安装区别 # 5.7在编译安装的时候多了一个 boost 库 [root@db02 mysql-5.7.20]# yum install -y gcc ...
- LINUX - 最简单的CS通信实例
服务端[编译:gcc server.c -o server] #include <stdio.h> #include <sys/socket.h> #include <s ...
- 网络安全-WEB基础,burpsuite,WEB漏洞
1. web基础 HTTP: GET POST REQUEST RESPONSE... JDK robots.txt 网页源代码/注释 目录扫描--御剑,dirmap 端口信息--nmap 备份文件- ...
- PyQt5 问题集
PyQt5中遇到的一些问题 1.多线程中界面异步刷新 我这里需要给界面动态添加新的控件,但是多线程中似乎并不能直接更新页面? 对于逻辑和界面分离的情况,使用自定义信号的方式进行页面控件的动态添加.注意 ...
- macOS 需要更新软件才能连接到 iOS 设备
macOS 需要更新软件才能连接到 iOS 设备 更新 Mac 上的软件 如果您在 iPhone.iPad 或 iPod touch 上看到"需要更新软件才能连接到 iOS 设备" ...