前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2022-03-09:我们正在玩一个猜数游戏,游戏规则如下: 我

2022-03-09:我们正在玩一个猜数游戏,游戏规则如下: 我

原创
作者头像
福大大架构师每日一题
发布于 2022-03-09 15:04:25
发布于 2022-03-09 15:04:25
3530
举报

2022-03-09:我们正在玩一个猜数游戏,游戏规则如下:

我从 1 到 n 之间选择一个数字。

你来猜我选了哪个数字。

如果你猜到正确的数字,就会 赢得游戏 。

如果你猜错了,那么我会告诉你,我选的数字比你的 更大或者更小 ,并且你需要继续猜数。

每当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。

如果你花光了钱,就会 输掉游戏 。

给你一个特定的数字 n ,返回能够 确保你获胜 的最小现金数,不管我选择那个数字 。

答案2022-03-09:

容易想到二分法,但二分法是不对的。

递归或动态规划。

只有1个数字的时候,返回0。

只有两个数字的时候,选小的。

大于等于3个数字的时候,每一个都试一下。

代码用golang编写。代码如下:

```go

package main

import "fmt"

func main() {

ret := getMoneyAmount2(1000)

fmt.Println(ret)

}

func getMoneyAmount2(n int) int {

dp := make([][]int, n+1)

for i := 0; i < n+1; i++ {

dp[i] = make([]int, n+1)

}

for i := 1; i < n; i++ {

dp[i][i+1] = i

}

for L := n - 2; L >= 1; L-- {

for R := L + 2; R <= n; R++ {

dp[L][R] = getMin(L+dp[L+1][R], R+dp[L][R-1])

for M := L + 1; M < R; M++ {

dp[L][R] = getMin(dp[L][R], M+getMax(dp[L][M-1], dp[M+1][R]))

}

}

}

return dp[1][n]

}

func getMax(a, b int) int {

if a > b {

return a

} else {

return b

}

}

func getMin(a, b int) int {

if a < b {

return a

} else {

return b

}

}

```

执行结果如下:

![在这里插入图片描述](https://img-blog.csdnimg.cn/303d9c22508a4ff4a8cec552fce26858.png)

***

[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2021_11_4_week/Code02_GuessNumberHigherOrLowerII.java)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【记忆化搜索】猜数字游戏Ⅱ
给你一个特定的数字 n ,返回能够 确保你获胜 的最小现金数,不管我选择那个数字 。
利刃大大
2025/02/18
800
【记忆化搜索】猜数字游戏Ⅱ
2022-03-23:在k进制下,最小多小的num,可以让1~num范围的数拥有1的个数不少于n个?
2022-03-23:在k进制下,最小多小的num,可以让1~num范围的数拥有1的个数不少于n个?
福大大架构师每日一题
2022/04/13
2660
2022-03-23:在k进制下,最小多小的num,可以让1~num范围的数拥有1的个数不少于n个?
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一个气球都能获得分数,假设打爆气 球 的分数为 X,获得分数的规则如下: 1)如果被打爆气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为 L;如果被打爆气球的右边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为 R。 获得分数为 L_X_R。 2)如果被打爆气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为 L;如果被打爆气球的右边所有气球都已经被打爆。获得分数为 L_X。 3)如果被打爆气球的左边所有的气球都已经被打爆;如果被打爆气球的右边有没被打爆的 气球,找到离被打爆气球最近的气球,假设分数为 R;如果被打爆气球的右边所有气球都 已经 被打爆。获得分数为 X_R。 4)如果被打爆气球的左边和右边所有的气球都已经被打爆。获得分数为 X。目标是打爆所有气球,获得每次打爆的分数。通过选择打爆气球的顺序,可以得到不同的总分,请返回能获得的最大分数。【举例】arr = {3,2,5} 如果先打爆3,获得3_2;再打爆2,获得2_5;最后打爆5,获得5;最后总分21 如果先打爆3,获得3_2;再打爆5,获得2_5;最后打爆2,获得2;最后总分18 如果先打爆2,获得3_2_5;再打爆3,获得3_5;最后打爆5,获得5;最后总分50 如果先打爆2,获得3_2_5;再打爆5,获得3_5;最后打爆3,获得3;最后总分48 如果先打爆5,获得2_5;再打爆3,获得3_2;最后打爆2,获得2;最后总分18 如果先打爆5,获得2_5;再打爆2,获得3_2;最后打爆3,获得3;最后总分19 返回能获得的最大分数为50。
福大大架构师每日一题
2021/05/04
3320
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一
2022-04-09:给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m , 数组下标 从 1 开始 计数。
2022-04-09:给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m ,
福大大架构师每日一题
2022/04/09
4500
LeetCode 375. 猜数字大小 II(DP)
然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。 直到你猜到我选的数字,你才算赢得了这个游戏。
Michael阿明
2021/02/19
3510
2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。,
2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明。请返回最后获胜者的分数。
福大大架构师每日一题
2021/02/15
4330
2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。,
2021-12-11:最大正方形。在一个由 ‘0‘ 和 ‘1‘ 组成的二维矩
2021-12-11:最大正方形。在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。力扣221。
福大大架构师每日一题
2021/12/12
5300
2021-12-30:分裂问题。 一个数n,可以分裂成一个数组[n/2,
2021-12-30:分裂问题。 一个数n,可以分裂成一个数组n/2, n%2, n/2, 这个数组中哪个数不是1或者0,就继续分裂下去。 比如 n = 5,一开始分裂成2, 1, 2, 2, 1, 2这个数组中不是1或者0的数,会继续分裂下去,比如两个2就继续分裂, 2, 1, 2 -> 1, 0, 1, 1, 1, 0, 1, 那么我们说,5最后分裂成1, 0, 1, 1, 1, 0, 1。 每一个数都可以这么分裂,在最终分裂的数组中,假设下标从1开始, 给定三个数n、l、r,返回n的最终分裂数组里l,
福大大架构师每日一题
2021/12/30
2010
2021-12-11:最大正方形。在一个由 ‘0‘ 和 ‘1‘ 组成的二维矩阵内,找到只包含 ‘1‘ 的最大正方形,并返回其面积
2021-12-11:最大正方形。在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。力扣221。
福大大架构师每日一题
2021/12/17
6160
2021-12-11:最大正方形。在一个由 ‘0‘ 和 ‘1‘ 组成的二维矩阵内,找到只包含 ‘1‘ 的最大正方形,并返回其面积
2021-05-20:给定一个数组arr, 返回如果排序之后,相邻两数
2021-05-20:给定一个数组arr, 返回如果排序之后,相邻两数的最大差值。要求:时间复杂度O(N) 。
福大大架构师每日一题
2021/05/20
3470
2021-05-20:给定一个数组arr, 返回如果排序之后,相邻两数
2022-12-16:给你一个长度为n的数组,并询问q次每次询问区间[l,r]之间是否存在小于等于k个数的和大于等于x每条查询返
[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_09_1_week/Code04_QueryTopKSum.java)
福大大架构师每日一题
2023/02/01
1K0
​LeetCode刷题实战375:猜数字大小 II
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/09/17
3990
2021-08-08:自由之路。电子游戏“辐射4”中,任务“通向自
2021-08-08:自由之路。电子游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。给定一个字符串 ring,表示刻在外环上的编码;给定另一个字符串 key,表示需要拼写的关键词。您需要算出能够拼写关键词中所有字符的最少步数。最初,ring 的第一个字符与12:00方向对齐。您需要顺时针或逆时针旋转 ring 以使 key 的一个字符在 12:00 方向对齐,然后按下中心按钮,以此逐个拼写完 key 中的所有字符。旋转 ring 拼出 key 字符 keyi 的阶段中:您可以将 ring 顺时针或逆时针旋转一个位置,计为1步。旋转的最终目的是将字符串 ring 的一个字符与 12:00 方向对齐,并且这个字符必须等于字符 keyi 。如果字符 keyi 已经对齐到12:00方向,您需要按下中心按钮进行拼写,这也将算作 1 步。按完之后,您可以开始拼写 key 的下一个字符(下一阶段), 直至完成所有拼写。
福大大架构师每日一题
2021/08/08
3640
2021-08-08:自由之路。电子游戏“辐射4”中,任务“通向自
2021-10-26:给定一个数组arr,arr[i] = j,表示第i号试题的
2021-10-26:给定一个数组arr,arri = j,表示第i号试题的难度为j。给定一个非负数M。想出一张卷子,对于任何相邻的两道题目,前一题的难度不能超过后一题的难度+M。返回所有可能的卷子种数。
福大大架构师每日一题
2021/10/26
3190
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。如果arr长度为偶数,两个集合包含数的个数要一样多;如果arr长度为奇数,两个集合包含数的个数必须只差一个。请尽量让两个集合的累加和接近,返回最接近的情况下,较小集合的累加和。
福大大架构师每日一题
2021/02/25
3040
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。
375. 猜数字大小 II
我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。 然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。 示例: n = 10, 我选择了8. 第一轮: 你猜我选择的数字是5,我会告诉你,我的数字更大一些,然后你需要支付5块。 第二轮: 你猜是7,我告诉你,我的数字更大一些,你支付7块。 第三轮: 你猜是9,我告诉你,我
编程张无忌
2021/06/29
5370
2021-04-05:给两个长度分别为M和N的整型数组...
2021-04-05:给两个长度分别为M和N的整型数组nums1和nums2,其中每个值都不大于9,再给定一个正数K。 你可以在nums1和nums2中挑选数字,要求一共挑选K个,并且要从左到右挑。返回所有可能的结果中,代表最大数字的结果。
福大大架构师每日一题
2021/04/05
4780
2021-04-05:给两个长度分别为M和N的整型数组...
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一个气球都能获得分数,假设打爆气 球 的分数为 X,获得
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一个气球都能获得分数,假设打爆气 球 的分数为 X,获得分数的规则如下: 1)如果被打爆气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为 L;如果被打爆气球的右边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为 R。获得分数为 L*X*R。2)如果被打爆气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为 L;如果被打爆气球的右边所有气球都已经被打爆。获得分数为 L*X。3)如果被打爆气球的左边所有的气球都已经被打爆;如果被打爆气球的右边有没被打爆的 气球,找到离被打爆气球最近的气球,假设分数为 R;如果被打爆气球的右边所有气球都 已经 被打爆。获得分数为 X*R。4)如果被打爆气球的左边和右边所有的气球都已经被打爆。获得分数为 X。目标是打爆所有气球,获得每次打爆的分数。通过选择打爆气球的顺序,可以得到不同的总分,请返回能获得的最大分数。【举例】arr = {3,2,5} 如果先打爆3,获得3*2;再打爆2,获得2*5;最后打爆5,获得5;最后总分21 如果先打爆3,获得3*2;再打爆5,获得2*5;最后打爆2,获得2;最后总分18 如果先打爆2,获得3*2*5;再打爆3,获得3*5;最后打爆5,获得5;最后总分50 如果先打爆2,获得3*2*5;再打爆5,获得3*5;最后打爆3,获得3;最后总分48 如果先打爆5,获得2*5;再打爆3,获得3*2;最后打爆2,获得2;最后总分18 如果先打爆5,获得2*5;再打爆2,获得3*2;最后打爆3,获得3;最后总分19 返回能获得的最大分数为50。
福大大架构师每日一题
2021/08/05
3620
2022-03-17:所有黑洞的中心点记录在holes数组里, 比如[[3,5
2022-03-17:所有黑洞的中心点记录在holes数组里, 比如[3,5]表示,第一个黑洞在(3,5),第二个黑洞在(6,9), 并且所有黑洞的中心点都在左下角(0,0),右上角(x,y)的区域里, 飞船一旦开始进入黑洞,就会被吸进黑洞里。 返回如果统一所有黑洞的半径,最大半径是多少, 依然能保证飞船从(0,0)能到达(x,y)。 来自美团。 答案2022-03-17: 二分答案+并查集。 代码用golang编写。代码如下: package main import ( "fmt" "math" )
福大大架构师每日一题
2022/03/17
2080
C语言对猜数游戏的优化(防止输入错误)
可以看到这里我们没有一直输入数据,但是程序一直循环,因为在第一次输入数据时,我不小心输入了一个字符'a',但是scanf是读取要求的类型与输入的类型不符合,然而又被留在scanf的缓存区中了,故一直循环读取scanf缓存区的内容,形成了死循环! 为了解决这个问题,我写了一个函数去防止读取错误,具体可看拙作 C语言中限定输入scanf的为整型(整数),浮点型-CSDN博客
走在努力路上的自己
2024/01/26
2270
C语言对猜数游戏的优化(防止输入错误)
推荐阅读
【记忆化搜索】猜数字游戏Ⅱ
800
2022-03-23:在k进制下,最小多小的num,可以让1~num范围的数拥有1的个数不少于n个?
2660
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一
3320
2022-04-09:给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m , 数组下标 从 1 开始 计数。
4500
LeetCode 375. 猜数字大小 II(DP)
3510
2021-02-15:给定一个整型数组arr,代表数值不同的纸牌排成一条线。,
4330
2021-12-11:最大正方形。在一个由 ‘0‘ 和 ‘1‘ 组成的二维矩
5300
2021-12-30:分裂问题。 一个数n,可以分裂成一个数组[n/2,
2010
2021-12-11:最大正方形。在一个由 ‘0‘ 和 ‘1‘ 组成的二维矩阵内,找到只包含 ‘1‘ 的最大正方形,并返回其面积
6160
2021-05-20:给定一个数组arr, 返回如果排序之后,相邻两数
3470
2022-12-16:给你一个长度为n的数组,并询问q次每次询问区间[l,r]之间是否存在小于等于k个数的和大于等于x每条查询返
1K0
​LeetCode刷题实战375:猜数字大小 II
3990
2021-08-08:自由之路。电子游戏“辐射4”中,任务“通向自
3640
2021-10-26:给定一个数组arr,arr[i] = j,表示第i号试题的
3190
2021-02-25:给定一个正数数组arr,请把arr中所有的数分成两个集合。
3040
375. 猜数字大小 II
5370
2021-04-05:给两个长度分别为M和N的整型数组...
4780
2021-04-29:给定一个数组 arr,代表一排有分数的气球。每打爆一个气球都能获得分数,假设打爆气 球 的分数为 X,获得
3620
2022-03-17:所有黑洞的中心点记录在holes数组里, 比如[[3,5
2080
C语言对猜数游戏的优化(防止输入错误)
2270
相关推荐
【记忆化搜索】猜数字游戏Ⅱ
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档