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,一经查实,立即删除!

相关文章

guid mysql_关于MySQL:MySQL-如何搜索GUID

我正在使用第三方.NET库(Rhino Security)&#xff0c;将其标识符存储为mysql数据库中binary(16)字段中的向导。 一切都可以从该应用程序完美地工作&#xff0c;但是当我尝试通过查询编辑器(对于MySQL为TOAD)手动运行查询时&#xff0c;没有行返回我知道存在的标识符。 例如&…

java 单例 生命周期_Rhythmk 一步一步学 JAVA (13) Spring-2 之Ben懒加载以及生命周期,单例...

1、定义Demo类&#xff1a;package com.rhythmk.spring;public class User {public void Init (){System.out.println("User 对象被 创建&#xff01;");}// 计数器public int Count0;public void Say(){this.Count;System.out.println("User 被"this.Coun…

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

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

java窗体线条切换消失_java – 如何更改apache poi生成的图表不使用平滑线条并将空单元格显示为间隙?...

我使用的是POI 3.12-beta1,并且代码可以在图例中创建包含多个数据集和命名系列的折线图.但是,poi中折线图的默认设置会生成一条已在数据点上平滑的线.空值也被绘制为0,但我们希望这些线在第一列停止,其中有一个空单元格.一旦在xlsx文件中呈现并更改这些设置,我就可以进入图表属…

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

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

java alert跳页面_JavaScript中通过提示框跳转页面的方法

通过提示框跳转页面具体代码如下所示&#xff1a;Documentwindow.onload function(){ //设置当页面加载时执行var btn document.getElementsByTagName("button")[] //获取btn元素btn.onclick function(){ //给button加上一个点击事件var answer confirm("是否…

java jsp if else if_jsp页面使用if else语句 | 学步园

jsp页面嵌入java语句使用即可,但是在使用if else语句时一定要注意使用是标点的使用,在语句中分号不能写,不符合jsp页面的语法规则,若多写了则会报错:如下:{name: priceRA, type: string}, {name: priceRB, type: string}, {name: priceRC, type: string},{name: priceRD, typ…

mysql 优化300例_mysql的limit优化实例

测试环境操作系统: debian linux服务器版本: Mysql 5.0.24Mysql数据库的Qcache缓存关闭数据库表testtable的参数:类型: MyISAM 大小: >80MB 记录规模: >50000 字段数: >25个字段id是主键 leibie字段上建有索引进行数据分段测试1>SQL不带where条件的测试1…

mysql+百万+中间表_MYSQL优化

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

java kafka 拉取_java获取kafka consumer lag

maven依赖org.apache.kafkakafka-clients0.10.1.0注意&#xff1a;kafka-clients版本需要0.10.1.0以上&#xff0c;因为调用了新增接口endOffsets;laglogsize-offsetlogsize通过consumer的endOffsets接口获得&#xff1b;offset通过consumer的committed接口获得&#xff1b;imp…

java开源图像处理ku_83 项开源视觉 SLAM 方案够你用了吗?

原标题&#xff1a;83 项开源视觉 SLAM 方案够你用了吗&#xff1f;公众号&#xff1a;3D视觉工坊主要关注&#xff1a;3D视觉算法、SLAM、vSLAM、计算机视觉、深度学习、自动驾驶、图像处理以及技术干货分享运营者和嘉宾介绍&#xff1a;运营者来自国内一线大厂的算法工程师&a…

java 方法的拆分_java – 字符串拆分和比较 – 最快的方法

>将输入读入byte []数组以将指针保持在代码的一侧.>逐字节读取,计算整数元素&#xff1a;int b inputBytes[p];int d b - 0;if (0 < d) {if (d < 9) {element element * 10 d;} else {// b :}} else {// b ,// add element to the hash; element 0;...}if (…

java sql异常_java.sql.SQLException: Io 异常: Got minus one from a

java.sql.SQLException: Io 异常: Got minus one from a read callat oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)at oracle.jdbc.driver.DatabaseError.thro…

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…

php学的是什么意思_为什么要学习PHP?到底什么是PHP?

为什么要学习PHP?到底什么是PHP?PHP可以做什么?相信这样的问题困扰着很多的人&#xff0c;在我没工作之前&#xff0c;都没有听说过PHP&#xff0c;自从工作后&#xff0c;慢慢接触到代码&#xff0c;慢慢知道什么是PHP。PHP是做网站一种语言&#xff0c;很多工程师都使用PH…

php 多数据库联合查询,php如何同时连接多个数据库_PHP教程

下面是一个函数能够保证连接多个数据库的下不同的表的函数&#xff0c;可以收藏一下&#xff0c;比较实用&#xff0c;测试过是有用的。function mysql_oper($oper,$db,$table,$where1,$limit10){$connmysql_connect(localhost,like,admin,true) or mysql_error();mysql_select…

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;让我们…

java 素数乘积,求助2424379123 = 两个素数的乘积,求这两个素数?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import java.util.ArrayList;import java.util.Date;public class Test {static ArrayList list new ArrayList();/*** 初始化素数表* return*/public static ArrayList initArrayList() {list.add(2);list.add(3);list.add(5);li…