题目

/*
方格填数 如下的10个格子
+--+--+--+
| | | |
+--+--+--+--+
| | | | |
+--+--+--+--+
| | | |
+--+--+--+ (如果显示有问题,也可以参看【图1.jpg】) 填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。*/

答案

1580

代码

 public class Main {
static int sum = 0 ;
public static void main(String[] args) {
int a[] = {0,1,2,3,4,5,6,7,8,9};
int b[] = new int[10];
String s = "";
f(a,b,0,s);
System.out.println(sum);
}
private static void f(int[] a,int[] b,int k,String s) {
if(k!=0 && k!=1 && k!=4 && k!=8 ){
if(Math.abs(b[k-1]-b[k-2])==1) return;
}
if(k>=4 && k<=10 && k!=7){
if(Math.abs(b[k-1]-b[k-4])==1) return;
}
if(k>=5 && k<=10){
if(Math.abs(b[k-1]-b[k-5])==1) return;
}
if(k==6 || k==7 || k==9 || k==10){
if(Math.abs(b[k-1]-b[k-6])==1) return;
} if(k==a.length) {
sum++;
System.out.println(s);
return;
}
for(int i=0;i<a.length;i++){
String ss = s;
if(a[i]==-1) continue;
b[k] = a[i];
ss += a[i];
a[i] = -1;
f(a,b,k+1,ss);
a[i] = b[k];
} }
}

分析

  这又是一道涉及到排列组合的算法题,我用的是比较简单和常见的解法,利用循环递归,开始依次向方格里面填数, 每填一个数都会判断一下这个数是不是符合条件,如果符合条件则递归进去填下一个,如果不符合条件则return,当满足在满足条件的情况下数填完之后(k==10),则sum++,计数加一

  因为判断条件对方格有所依赖,所以想在短时间内写出一个比较完美通用的算法是有点困难的,我们可以把情况细分,使得条件结构更清晰一点,

  再说一个我觉得比较有创意的一点,这也是我最近学到的,就是用一个字符串,让这个字符串也参与递归,就可以巧妙的可以把每次的情况都输出来了,我很喜欢。

private static void f(int[] a,int[] b,int k,String s) {
11 if(k!=0 && k!=1 && k!=4 && k!=8 ){
12 if(Math.abs(b[k-1]-b[k-2])==1) return;
13 }
14 if(k>=4 && k<=10 && k!=7){
15 if(Math.abs(b[k-1]-b[k-4])==1) return;
16 }
17 if(k>=5 && k<=10){
18 if(Math.abs(b[k-1]-b[k-5])==1) return;
19 }
20 if(k==6 || k==7 || k==9 || k==10){
21 if(Math.abs(b[k-1]-b[k-6])==1) return;
22 }
23
24 if(k==a.length) {
25 sum++;
26 System.out.println(s);
27 return;
28 }
29 for(int i=0;i<a.length;i++){
30 String ss = s;
31 if(a[i]==-1) continue;
32 b[k] = a[i];
33 ss += a[i];
34 a[i] = -1;
35 f(a,b,k+1,ss);
36 a[i] = b[k];
37 }
38
39
40 }

第七届蓝桥杯javaB组真题解析-方格填数(第六题)的更多相关文章

  1. 2016年第七届蓝桥杯javaB组 试题 答案 解析

    1.煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有多少个煤 ...

  2. 第七届蓝桥杯javaB组真题解析-分小组(第四题)

    题目 /* 分小组 9名运动员参加比赛,需要分3组进行预赛. 有哪些分组的方案呢? 我们标记运动员为 A,B,C,... I 下面的程序列出了所有的分组方法. 该程序的正常输出为: ABC DEF G ...

  3. 第七届蓝桥杯javaB组真题解析-凑算式(第三题)

    题目 /* 凑算式 B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见[图1.jpg]) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字. 比 ...

  4. 第七届蓝桥杯javaB组真题解析-生日蜡烛(第二题)

    题目 /* 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始 ...

  5. 第七届蓝桥杯javaB组真题解析-煤球数目(第一题)

    题目 /* 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), .... 如果一共有100层,共有 ...

  6. 第七届蓝桥杯javaB组真题解析-四平方和(第八题)

    题目 /* 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1 ...

  7. 第七届蓝桥杯javaB组真题解析-剪邮票(第七题)

    题目 /* 剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色 ...

  8. 第七届蓝桥杯javaB组真题解析-抽签(第五题)

    题目 /* 抽签 X星球要派出一个5人组成的观察团前往W星. 其中: A国最多可以派出4人. B国最多可以派出2人. C国最多可以派出2人. .... 那么最终派往W星的观察团会有多少种国别的不同组合 ...

  9. 第七届蓝桥杯JavaB组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.煤球数量 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第 ...

随机推荐

  1. opencv:边缘保留滤波

    EPF滤波概述 均值与滤波的缺点:并没有考虑中心像素点对整个输出像素的贡献,实际上锚定的那个点贡献应该是最大的 高斯滤波的缺点:当边缘值梯度很大的时候,应减少中心像素点的权重,而高斯滤波没有考虑 边缘 ...

  2. 错误记录(一):VSCode

    VS Code莫名其妙突然变卡. 后来重新安装,下载以前版本,设置防止循环,都不太管用. 最后想添加VS Code目录到windows扫描白名单,但因为系统之前是英文不太好看懂,所以又调回了中文. 这 ...

  3. 1.0 Jmeter 安装运行

    1.百度搜索JDK进行下载JDK安装与环境变量配置http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html ---- 在JDK安装完 ...

  4. 路飞-后台Django项目创建

    后台:Django项目创建 环境 """ 为luffy项目创建一个虚拟环境 >: mkvirtualenv luffy """ &qu ...

  5. deepin-wine-qq无法加载图片解决方案

    最近在qq水群讨论学术的时候发现了一个奇怪的问题:无法加载图片. 具体点是,如果图片没有被其他设备接收,并且在缓存中,图片是可以加载的,反之不可. 这东西很烦人啊,于是我就去查项目issue:http ...

  6. 【visio】 图片

    1.背景页设置 新建背景页:新建页面>设计>页面设置>页属性      使用背景页:在页属性页的"背景" 选项里,选择需要的背景. 2.插入图片 支持插入本地图片 ...

  7. 企业级Docker镜像仓库Harbor部署与使用

    yum install docker 官网地址:https://docs.docker.com/compose/install/ 运行此命令以下载Docker Compose的当前稳定版本 1 sud ...

  8. js遍历传参到html

    <p id="subp" hidden><button id= "upsub"shiro:hasPermission="sys:me ...

  9. JVM系列(三)之GC

    什么是GC Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄 ...

  10. Shiro入门学习之shi.ini实现授权(三)

    一.Shiro授权 前提:需要认证通过才会有授权一说 1.授权过程 2.相关方法说明 ①subject.hasRole("role1"):判断是否有该角色 ②subject.has ...