没有新消息
更多内容
0 条评论
暂无评论,快来写下您的评论
问题来自于
福大大
#福大大架构师每日一题#2024-03-06:用go语言,每一种货币都给定面值val[i],和拥有的数量cnt[i], 想知
2024-03-06:用go语言,每一种货币都给定面值val[i],和拥有的数量cnt[i], 想知道目前拥有的货币,在钱数为1、2、3...m时,能找零成功的钱数有多少? 也就是说当钱数的范围是1~m,返回这个范围上有多少可以找零成功的钱数。 比如只有3元的货币,数量是5张,
1775
阅读
5
回答
@2024 职Q 智联招聘
合作商务邮箱:sbyh@zhaopin.com.cn
友情链接
HR圈内招聘/ 同道问答/ 人资知识社区
51社保/ X职场/ HR Bar/ 中人网/ 研招网
京ICP备17067871号 合字B2-20210134
京公网安备 11010502030147号
人力资源许可证:1101052003273号
网上有害信息举报专区
违法不良信息举报电话:400-885-9898
关爱未成年举报热线:400-885-9898-7
朝阳区人力资源与社会保障局 监督电话: 57596212,65090445
#福大大架构师每日一题#2024-03-06:用go语言,每一种货币都给定面值val[i],和拥有的数量cnt[i], 想知
在Go语言中,要解决这个问题,你可以使用动态规划的方法。首先,你需要创建一个数组来记录每个金额的组合数量。然后,你可以遍历货币的面值和数量,更新这个数组。 下面是一个可能的Go语言实现: ```go package main import ( "fmt" ) func countCombinations(val []int, cnt []int, m int) int { // dp[i] 表示金额 i 可以找零成功的钱数数量 dp := make([]int, m+1) dp[0] = 1 // 金额为0时,只有一种组合,即不找零 // 遍历每种货币 for i, v := range val { // 遍历货币数量 for j := 0; j <= cnt[i]; j++ { // 遍历金额 for k := v; k <= m; k++ { // 更新金额 k 的组合数量 dp[k] += dp[k-v] } } } // 返回1到m之间可以找零成功的钱数数量 return dp[1] + dp[2] + ... + dp[m] } func main() { val := []int{3} // 货币面值 cnt := []int{5} // 货币数量 m := 15 // 查找的最大金额 result := countCombinations(val, cnt, m) fmt.Printf("在金额1到%d之间,可以找零成功的钱数数量是:%d\n", m, result) } ``` 在这个例子中,`val` 是货币的面值数组,`cnt` 是每种货币的数量数组,`m` 是我们想要查找的最大金额。`countCombinations` 函数使用动态规划来计算在1到`m`之间可以找零成功的钱数数量。 注意,这个实现假设货币的面值和数量都是非负整数,并且`m`不会超过`int`类型的最大值。此外,这个实现没有考虑货币找零的顺序,即认为3张3元找零和1张3元找零是两种不同的方式。 运行上述代码,你将得到在金额1到15之间,可以找零成功的钱数数量。在这个例子中,由于只有3元的货币,数量为5张,所以只有金额3、6、9、12和15可以找零成功,因此输出应该是5。