猴子摘香蕉问题python_硬币找零&&爬楼梯&&猴子摘香蕉「建议收藏」

猴子摘香蕉问题python_硬币找零&&爬楼梯&&猴子摘香蕉「建议收藏」硬币找零&&爬楼梯&&猴子摘香蕉假设有几种硬币,如1、3、5,并且数量无限。请找出能够组成某个数目的找零所使用最少的硬币数。#include”CoinProblem.h”#includeintcountNum=MAX;voidCoinProblem(int*coin,intLength,intValue,intcount){if(Value==0){if(count…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

硬币找零&&爬楼梯&&猴子摘香蕉

假设有几种硬币,如1、3、5,并且数量无限。请找出能够组成某个数目的找零所使用最少的硬币数。

#include”CoinProblem.h”

#include

intcountNum=MAX;

voidCoinProblem(int*coin,intLength,intValue,intcount){

if(Value==0){

if(countNum>count){

countNum=count;

}

return;

}

for(inti=0;i

if(Value>=coin[i]){

CoinProblem(coin,Length,Value-coin[i],count+1);

}

}

}

#ifndefCOIN_PROBLEM_H

#defineCOIN_PROBLEM_H

#defineMAX65535

externintcountNum;

voidCoinProblem(int*coin,intLength,intValue,intcount);

#endif

#include”CoinProblem.h”

#include

intmain(){

intcoin[3]={1,3,5};

CoinProblem(coin,3,5,0);

std::cout<

}

这些问题都是一类问题,你猴子摘香蕉、硬币找零、爬楼梯等。

这类问题的共同点就是你要问题解决问题,也就是说你要恰好把问是不多不少地解决,不管你怎么摘香蕉,不管你一次

是摘几个,你得把香蕉摘完。你得恰好找别人那么钱,不能多也不能少。爬楼梯也一样啰。。反下是解决问题。

这个不像背包问题,因为背包是不一定能装满的,也就是结束条件是不确定的。

但是我们不要管是不是恰好,因为我们采用了梯归。因为递归的好处是把所有能考虑的问题都考虑了,包括恰好解决问题和

把问题所要求的多,或者少。。

if(Value==0){

if(countNum>count){

countNum=count;

}

return;

}

如上面的代码就是专门用来限制结束条件的,只有当我们找的钱恰好是那么多是,我们才会计数。

于是我们可能通过自己的限定条件来限制要计数的情况。

特注意的是:

​由于我自己的疏忽,导致在以前写这些代码的时候出了些小问题,以前我是这样写的

voidCoinProblem(int*coin,intLength,intValue,intcount){

if(Value==0){

if(countNum>count){

countNum=count;

}

return;

}

for(inti=0;i

if(Value>=coin[i]){

CoinProblem(coin,Length,Value-coin[i],++count);

}

}

}

看代码中红色的部分,这里成了++count,这里是改变了count的值,我这意思是改变了在这一次递归运算中的所有count的值,也就是说,i=0时

如count=2,同时也符合条件,也就是说进入那个条件判断语句,于是用++count时会发现count变成了3,这确实是我们所期望的,但是

如果下一次“归”回来后,i=1时,那时发现count一开始就是3了。不再是我们期望的2了。

于是正确的写法应该是这样:

voidCoinProblem(int*coin,intLength,intValue,intcount){

if(Value==0){

if(countNum>count){

countNum=count;

}

return;

}

for(inti=0;i

if(Value>=coin[i]){

CoinProblem(coin,Length,Value-coin[i],count+1);

}

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189390.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月13日 下午8:25
下一篇 2026年4月13日 下午8:31


相关推荐

  • Android抓包工具——Fiddler

    Android抓包工具——Fiddler前言 在平时和其他大佬交流时 总会出现这么些话 抓个包看看就知道哪出问题了 抓流量啊 payload 都在里面 这数据流怎么这么奇怪 这里出现的名词 其实都是差不多的意思啊 这都跟抓包这个词有关 说到抓包呢我们今天就先来了解一下抓包的一些基础定义跟抓包工具 Fiddler 的使用跟安装吧 本篇文章 博主只想使用通俗易懂的话语 让大家明白以下内容 什么是抓包哪些场景需要用到抓包 Fiddler 抓包的原理怎样使用 Fiddler 进行移动端抓包抓包包 Packet 是 T

    2026年3月20日
    3
  • jBox使用_jconsole使用教程

    jBox使用_jconsole使用教程$.jBox(content, options);      └ 或者 jBox(content, options);  参数说明:   – content (string,json)      └ 可以是string或json。当是string时,需要加上前缀标识(html:、id:、get:、post:、iframe:),如果没有加标识,系统会自动加上html:,具体请看应

    2025年8月21日
    4
  • 浮点数加减运算过程:对阶、尾数运算、规格化、舍入和判溢出

    浮点数加减运算过程:对阶、尾数运算、规格化、舍入和判溢出例如 两浮点数 x 0 1101 201 y 0 1010 211 求 x y 一 对阶 1 求补码 x 补 00 01 00 1101 y 补 00 11 11 0110 2 求阶差小阶向大阶对阶 同时尾数右移 移动位数为阶差 00 11 00 01 00 10 2 故阶差为 2 故 x 补 00 11 00 0011 二 尾数求和将对阶后的两个尾数安定点加减运算规则进行运算

    2026年3月16日
    3
  • vue数组对象去重

    vue数组对象去重vue 数组对象合并去重 Es6 的 Map

    2026年3月19日
    2
  • 条件分布_Y关于X的条件分布律

    条件分布_Y关于X的条件分布律给定另一随机变量Y的随机变量X的条件分布是当观察到Y取某一值时X的分布。

    2022年8月3日
    7
  • SQL Server 下载安装教程

    SQL Server 下载安装教程SQLServer2017下载安装教程第一步:打开浏览器,在浏览的搜索框中我们输入“SQLServer”。如图,会匹配出中文两条微软官方下载页面(一个页面内容是英文、一个页面内容是中文)。这里我们以中文的为例。第二步:点击进入下载页面后,可以看到如图所示页面,我们不要着急点击下载,因为这些SQLServer只能试用180天(大家从介绍中可以看到)。第三步:我们将网页下滑,可以看到…

    2022年4月29日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号