java蓝桥杯dfs_第七届 蓝桥杯决赛 Java B组 打靶 解题报告(DFS,回溯,全排列)-Go语言中文社区...

题目:

打靶

小明参加X星球的打靶比赛。

比赛使用电子感应计分系统。其中有一局,小明得了96分。

这局小明共打了6发子弹,没有脱靶。

但望远镜看过去,只有3个弹孔。

显然,有些子弹准确地穿过了前边的弹孔。

不同环数得分是这样设置的:

1,2,3,5,10,20,25,50

那么小明的6发子弹得分都是多少呢?有哪些可能情况呢?

下面的程序解决了这个问题。

仔细阅读分析代码,填写划线部分缺失的内容。

public class Main

{

static void f(int[] ta, int[] da, int k, int ho, int bu, int sc)

{

if(ho<0 || bu<0 || sc<0) return;

if(k==ta.length){

if(ho>0 || bu>0 || sc>0) return;

for(int i=0; i

for(int j=0; j

System.out.print(ta[i] + " ");

}

System.out.println();

return;

}

for(int i=0; i<=bu; i++){

da[k] = i;

f(ta, da, k+1, __________________ , bu-i, sc-ta[k]*i); // 填空位置

}

da[k] = 0;

}

public static void main(String[] args)

{

int[] ta = {1,2,3,5,10,20,25,50};

int[] da = new int[8];

f(ta, da, 0, 3, 6, 96);

}

}注意:只填写划线处缺少的内容,不要填写已有的代码或符号,也不要填写任何解释说明文字等。

本题结论有待验证,证明后更改,主要纠结于3代表总共三个弹孔,还是三次重复穿过弹孔

如果代表总共三个弹孔  答案:i > 0  ? ho - 1: ho

如果代表总共三次重复穿过:答案:i > 1 ? ho - (i - 1) : ho

分析:

1.main函数分析:

public static void main(String[] args) {

int[] ta = { 1, 2, 3, 5, 10, 20, 25, 50 };//记录分值

int[] da = new int[8];//记录每个分值的个数

f(ta, da, k,ho,bu, sc);

f(ta, da, 0, 3, 6, 96);//第一二个参数不用解释,从ta第0位开始枚举,3个重复弹孔,上限6个分数,共96分

}

2.递归函数分析:

static void f(int[] ta, int[] da, int k, int ho, int bu, int sc) {

if (ho < 0 || bu < 0 || sc < 0)//最后ho bu sc 都大于0 才有递归的必要(剪枝)

return;

if (k == ta.length) {// 当k枚举完ta数组(类似for循环的i),开始判断

if (ho > 0 || bu > 0 || sc > 0)// 三个参数都等于0,说明递归过程会把已经枚举的值扣除相应的ho,bu,sc值

return;

for (int i = 0; i < da.length; i++) {//输出每个分值

for (int j = 0; j < da[i]; j++)

System.out.print(ta[i] + " ");

}

System.out.println();

return;

}

for (int i = 0; i <= bu; i++) {//bu是分数个数的上限

da[k] = i;//每一个分值从0~bu(即6)进行深搜枚举

f(ta, da, k + 1, i > 1 ? ho - (i - 1) : ho, bu - i, sc - ta[k] * i); // 填空位置

}

/*刚开始直接填0,发现每个答案加起来就是96,唯一不同的就是,有的弹孔数不是3个

*可见,ho的值就是用来筛选的且要扣除有几个重复的,由da数组可知每个分值是记录每个分值个数的

*所以我推出ho,当分值的个数大于1,只要减去每个分值的个数扣掉1之后的值(即重复的数量),如da[1] = 3,那么我就ho扣掉2

*最后运行,果然,得出了三组数据且只有三个弹孔,完美解决

* */

da[k] = 0;//分值每种情况枚举完之后要回溯,清零

}

把ho填0,得出的结果:

090861782e15e2780319916e23f9c5fb.png

推出代码后结果:

c20d674287baa63163e828fd5f175c46.png

所以应该填入:i > 1 ? ho - (i - 1) : ho

完整代码:

public class Main {

static void f(int[] ta, int[] da, int k, int ho, int bu, int sc) {

if (ho < 0 || bu < 0 || sc < 0)

return;

if (k == ta.length) {

if (ho > 0 || bu > 0 || sc > 0)

return;

for (int i = 0; i < da.length; i++) {

for (int j = 0; j < da[i]; j++)

System.out.print(ta[i] + " ");

}

System.out.println();

return;

}

for (int i = 0; i <= bu; i++) {

da[k] = i;

f(ta, da, k + 1, i > 1 ? ho - (i - 1) : ho, bu - i, sc - ta[k] * i); // 填空位置

}

da[k] = 0;

}

public static void main(String[] args) {

int[] ta = { 1, 2, 3, 5, 10, 20, 25, 50 };

int[] da = new int[8];

f(ta, da, k,ho,bu, sc);

f(ta, da, 0, 3, 6, 96);

}

}

总结:

主要还是考深搜还有回溯,跟全排列有点像,类似全排列的进阶

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 高级泛型_java泛型的高级应用

展开全部在上面的例子中&#xff0c;由于没有限制class GenericsFoo类型持有者T的范围&#xff0c;实际上这里32313133353236313431303231363533e59b9ee7ad9431333339666666的限定类型相当于Object&#xff0c;这和“Object泛型”实质是一样的。限制比如我们要限制T为集合接口类…

java正则表达式 问号_正则表达式问号的四种用法详解

正则表达式问号的四种用法详解原文符号因为?在正则表达式中有特殊的含义&#xff0c;所以如果想匹配?本身&#xff0c;则需要转义&#xff0c;\?有无量词问号可以表示重复前面内容的0次或一次&#xff0c;也就是要么不出现&#xff0c;要么出现一次。非贪婪匹配贪婪匹配在满…

mysql+百万+中间表_MYSQL优化

MYSQL优化是一个非常大的课题&#xff0c;这篇文章主要介绍了跟MYSQL相关的4个方面&#xff0c;如果想深入研究可以查下相关资料。一、服务器级别优化二、操作系统级别优化三、MYSQL级别优化四、SQL级别优化一、服务器级别优化1.服务器选型SUN小型机、DELL730xd、HPDL380、IBM3…

java 拦截器ajax_(转)拦截器深入实践 - JAVA XML JAVASCRIPT AJAX CSS - BlogJava

Interceptor的定义我们来看一下Interceptor的接口的定义&#xff1a;Java代码 publicinterfaceInterceptorextendsSerializable {/*** Called to let an interceptor clean up any resources it has allocated.*/voiddestroy();/*** Called after an interceptor is created, b…

java判断有没有修改,java字节码判断对象应用是否被修改

原创1 背景在学习并发的时候看到了ConcurrentLinkedQueue队列的源码&#xff0c;刚开始的时候是看网上的帖子&#xff0c;然后就到IDE里边看源码&#xff0c;发现offer()方法在1.7版的时候有过修改。楼主的问题不是整个方法&#xff0c;而是其中的一截代码“(t ! (t tail))”&…

php接口 含义,php晋级必备:一文读懂php接口特点和使用!

PHP接口与类是什么关系&#xff1f;前面提到了php中抽象类和抽象方法&#xff0c;今天给大家谈谈php中接口技术。在PHP中每个类只能继承一个父类&#xff0c;如果声明的新类继承了抽象类实现了以后&#xff0c;这个新类就不能有其它的父类了。但是在实际中需要继承多个类实现功…

php获取不重复的随机数字,php如何生成不重复的随机数字

【摘要】PHP即“超文本预处理器”&#xff0c;是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言&#xff0c;与C语言类似&#xff0c;是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。下面是php如何生成不重复的随机数字&#xff0c;让我们…

php header什么意思,php header是什么意思

header函数在PHP中是发送一些头部信息的, 我们可以直接使用它来做301跳转等&#xff0c;下面我来总结关于header函数用法与一些常用见问题解决方法。发送一个原始 HTTP 标头[Http Header]到客户端。标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的字串&…

matlab dct稀疏系数,Matlab DCT详解

转自&#xff1a;http://blog.csdn.net/ahafg/article/details/48808443DCT变换DCT又称离散余弦变换&#xff0c;是一种块变换方式&#xff0c;只使用余弦函数来表达信号&#xff0c;与傅里叶变换紧密相关。常用于图像数据的压缩&#xff0c;通过将图像分成大小相等(一般为8*8)…

matlab验潮站,验潮站的作用是什么

验潮站的作用是什么?验潮站的建成投入使用&#xff0c;可实时观测沿海潮汐等观测要素&#xff0c;为潮汐预报、赤潮的发生、风暴潮预警报、海啸预警及海平面变化提供基础数据保障以及预测&#xff0c;同时为科学开发海洋提供有力的支持&#xff0c;为海洋经济健康发展保驾护航…

php收购,php中文网收购全国用户量最大的phpstudy集成开发环境揭秘

phpstudy介绍2008年第一个版本诞生&#xff0c;至今已有&#xff19;年,该程序包集成最新的ApachePHPMySQLphpMyAdminZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境.该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等.总之学习PHP只需一个包…

oracle lob值是什么,关于Oracle数据库LOB大字段总结

概述在ORACLE数据库中&#xff0c;DBA_OBJECTS视图中OBJECT_TYPE为LOB的对象是什么东西呢&#xff1f;其实OBJECT_TYPE为LOB就是大对象(LOB)&#xff0c;它指那些用来存储大量数据的数据库字段。Oracle 11gR2 文档&#xff1a;http://download.oracle.com/docs/cd/E11882_01/Ap…

Oracle19C的dbhome,Windows server 安装Oracle19c (WINDOWS.X64_193000_db_home.zip) 过程碰到的问题总结...

Oracle19c的下载地址&#xff1a;链接: https://pan.baidu.com/s/1snqyViOAoeffAztPes_Tvw提取码: 9kb6Oracle19c的安装过程&#xff1a;解压缩安装包&#xff1a;解压结果 以管理员方式运行setup开始安装 一直默认走到安装完成即可创建用户cmd执行sqlplus命令&#xff0c;输入…

oracle数据库配置管理,Oracle配置管理

一、连接Oracle1、Oracle建立连接的过程无论是通过sqlplus命令连接还是第三方工具远程连接到Oracle&#xff0c;都需要建立客户端与服务端之间的连接。Oracle Net Service组件就是为了用于建立连接的&#xff0c;这个组件在安装Oracle时已经安装。1)在服务器端有一个listener监…

linux内核 默认路由表,[Linux] linux路由表-Go语言中文社区

路由表用于决定数据包从哪个网口发出&#xff0c;其主要判断依据是目标IP地址Linux路由表其实有2个主要概念&#xff1a;按顺序走路由策略,在路由策略对应的路由表中匹配规则路由策略(rule)路由表(table)查看所有的路由策略,32766那个策略最有用,对应的main路由表也是默认展示的…

linux添加源地址ping,实战经验:Linux Source NAT在Ping场景下的应用

原标题&#xff1a;实战经验&#xff1a;Linux Source NAT在Ping场景下的应用有时候&#xff0c;有这样的一种需求&#xff1a;需要修改IP数据包中的源地址&#xff0c;比如&#xff0c;从某一个主机发送Ping包到另一个主机&#xff0c;需要修改源地址为另一个源(通常&#xff…

Linux升级glibc版本汉字乱码,Linux CentOS6升级glibc库过程

CentOS6升级glibc库过程hadoop无法加载native库&#xff0c;可能原因是 glibc库版本过低&#xff0c;需要升级。第一&#xff1a;安装以下软件yum -y install zlib zlib-devel gcc gcc-c libtool openssl openssl-devel automake autoconf libtool pcre*第二、查看系统glibc版本…

linux图形界面 革命,Windows 95带来的革命

CDECDE1993年6月-在“公用桌面环境“是与Sun&#xff0c;惠普&#xff0c;IBM和合资Unix系统实验室。CDE&#xff0c;通用桌面环境(CommonDesktopEnvironment)的缩写。CDE是一种运行于UNIX&#xff0c;基于Motif部件工具箱开发的商业桌面环境。惠普的OpenVMS采用CDE作为标准的桌…

real time linux pdf,【整理】ubuntu real time Linux

ubuntu real timeUbuntu不支持实时可参考看看如何才能支持想要自己编译实时内核的话参考去&#xff1a;下载&#xff1a;The Real Time Preempt Patch然后自己编译即可。对于实时系统所支持的功能和特性以及平台&#xff0c;详见这里提供了 已编译好的实时的Debian相关内容或参…

苹方字体 for linux,苹果苹方字体

苹果苹方字体是一款很实用的字体软件&#xff0c;苹果苹方字体是为中国苹果用户打造的全新字体&#xff0c;共有六种字重&#xff0c;使用方便&#xff0c;能够满足用户在阅读时不同的字体需求&#xff0c;并且苹果苹方字体还可以在安卓、Linux 等其他平台和设备上使用&#xf…