关于抢数字游戏的解法

华为OD(C卷,200分)- 7游戏 提示,根据dpB[m-1] = dpA[m] + dpA[m+1]的递推式,我们可以了解到dpA,dpB数组的长度应该初始化为m+2,这样上面递推式才不会越界。初始时,是A从m开始叫,因此 dpA[m] = 1,即A叫到数字m的方案数为1。之后我们可以递推出dpB[m-1],即B叫出数字m-1的方案数,即dpB[m-1] = dpA[m] + dp[m+1]dpA[m-1] = dpB[m] + dpB[m+1],而dpB[m]和dpB[m+1]都应该初始化为0。B叫了数字 i 的方案数有多少种呢? 阅读详情
抢数字游戏是小时候玩过的一个游戏,最近看到一个类似的问题,于是就想把这个游戏的解法记录下来。这个游戏我想玩过的人应该都知道,两个人轮流报数,规定了最多报几个数,然后目标就是要抢到某个数。其实这个问题的解法也很简单的,估计玩过的人大概大部分也都考虑过解法的。

下面还有一个变种,就是要让对方说那个数字,这个网上有可以玩的地方: http://www.davincicode.com.cn/
没玩过的可以去试试看哦。

规则在这里就不重复了(其实前面都输入过一遍的,结果一不小心全没了…… ),下面还是用例子来讲讲思路吧。假设要抢的数是23,每次最多报3个数。我要报到23,那么要让对方前一次报数的范围在20、21、22,而要让对方的范围在20、21、22,那么我就先要抢到19,要抢到19,就要让对方的范围在16、17、18,以此类推,就能找到规律了。这里的规律就是从23开始,每次减4的那个数都要抢到,就能赢了。

接下去推广一下,先假设几个变量:

p:要抢到的数;
q:每次最多报多少个数;
x(1)、x(2)、x(3)……x(n):每次要抢到的数的序列;

下面就是递归解:

x(1) = p mod (q + 1);
x(i) = x(i - 1) + (q + 1);          1 <= i <= n


有这个公式,就能计算出每次应该抢到的数字了。不过仔细推想可以发现,如果2个人都知道这个解法,那么获胜与否还与谁第一个报数有关,是先报数的能赢还是后报数的能赢,这个规律在于第一个式子。

如果 p mod (q + 1) = 0,即 x(1) = 0,那么后报数的就能赢;如果 x(1) != 0,那么先报数的就能赢。
数独·12中解法·anroid 数独小游戏·休闲益智小游戏 首页页面: 1.包含有简单、普通、困难、大师四种难度的数独挑战供选择; 阅读详情

相关推荐

299. 猜数字游戏

这个流程图展示了代码的主要执行步骤,从初始化变量开始,遍历字符串统计公牛和记录数字出现次数,然后计算奶牛数量,最后格式化结果并返回。这是一个字符串处理和计数的问题。可以通过遍历字符串来统计公牛的数量,然后使用哈希表来统计每个数字出现的次数,进而计算出奶牛的数量。写出一个秘密数字,并请朋友猜这个数字是多少。请注意秘密数字和朋友猜测的数字都可能含有重复数字。LeetCode 299. 猜数字游戏。,请你返回对朋友这次猜测的提示。

qq_40844444的博客 1108

游戏设计的100个原理

作者:(美)迪斯潘 出版时间:2015年2月 本书整合了众多游戏设计秘籍,概括并阐释了100条重要的游戏设计领域的方法、原理和设计哲学。   本书首次将游戏设计师的想法中最好的一部分变成一个工具包。作者在书中整合了众多游戏设计秘笈,概括并阐释了100 条重要的方法、原理和设计哲学。这些原理是从游戏设计的各个流派中收集而来的,并且从创新、创作、平衡和解决问题这4个角度来组织并加以阐释。每一条原理都采用丰富的案例来介绍多种不同的设计思路,同时以经典图片的形式展现该原理所蕴含的真谛。

7游戏 思路+代码(华为OD-C卷-200分-Python解法

A先报一个起始数字 X(10 ≤ 起始数字 ≤ 10000),B报下一个数字 Y (X - Y < 3),A再报一个数字 Z(Y - Z < 3),以此类推,直到其中一个到7,到7即为胜者;A先报一个起始数字 X(10 ≤ 起始数字 ≤ 10000),B报下一个数字 Y (X - Y < 3),A再报一个数字 Z(Y - Z < 3),以此类推,直到其中一个到7,到7即为胜者;本题的数量级很大,10 ≤ M ≤ 10000,因此满足要求的情况数量可能极端大,此时我们应该使用大数记录结果。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 686

30”游戏

由两个人玩“30”游戏游戏规则是:第一个人先说“1”或“2”,第二个人要接着往下说一个或两个数,然后又轮到第一个人,再接着往下说一个或两个数。这样两人反复轮流,每次每个人说一个或两个数都可以,但是不可以连说三个数,谁先到30,谁得胜。 问题分析 首先,分析这个游戏是否公平。一个游戏的公平性主要体现在游戏双方赢的机会性。 经分析可知,获胜者最后总能说到27,还有呢?获胜者陆续说出

march_it的博客 9289

数30游戏的一些思考

数30 昨天看了向往的生活第四季小岳岳那期玩了个游戏,叫数30。游戏有两个人玩,一个人最多可以数两个数,数到30的人算输。当时觉得这个游戏应该有必胜的方法,后来想了想,确实有写规律。 数30 为了好推导,我将游戏用数学化公式表达。数到n能赢表示1,会输表示0。例如f(30)=0,f(29)=1。 f(30)=0好理解,那么f(29)=1呢,因为当你数到29,对方一定会数30,对方就输了,所以当你数到29时是一定会赢的。 那么f(28)等于多少呢?当你数28时,对面可以数29,而f(29)=1,因此对面赢了

qq_35078278的博客 4287

智力题:30

智力题:30 游戏规则是:第一个人喊 “ 1 ”或 “ 2 ”,第二个人要接着往下喊一个或两个数,然后再轮到第一个人。两人轮流进行下去。最后喊 30 的人获胜。问喊数字的最佳策略。 答案:尽量喊3的倍数。 解析:倒着看,其实,喊 27 时,就决定胜负了。假设 A 喊了 27,B只能喊 28 或 29 ,下个回合,A 一定可以喊30。也就是说,喊 27 者必胜。 再倒着看,其实喊 24 时,就定胜负了。假设 A 喊了 24 ,B 只能喊 25 或 26 ,下个回合 A 一定能喊 27 。 由于喊 27 者必

Guo_Chuang的博客 4563

C语言编写——30游戏

由两个人玩“30”游戏游戏规则是:第一个人先说“1”或“2”,第二个人要接着往下说一个或两个数,然后又轮到第一个人,再接着往下说一个或两个数。这样两人反复轮流,每次每个人说一个或两个数都可以,但是不可以连说三个数,谁先到30,谁得胜。 问题分析: 通过观察可知谁先说27谁就会赢。要到27,必须先到24。依次类推变为3的问题 只要第二个人控制到27 24 21 18 15 12 9 6 3则一定会赢 所以可知这个游戏是不公平的,偏向后开口的人,而且这些数字都能整模3 假设变为“50

qq_45055426的博客 4703

HDU1847 Good Luck in CET-4 Everybody!

Problem Description   大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此。当然,作为在考场浸润了十几载的当代大学生,Kiki和Cici更懂得考前的放松,所谓“张弛有道”就是这个意思。这不,Kiki和Cici在每天晚上休息之前都要玩一会儿扑克牌以放松神经。 “升级”?“双扣”?“红五”?还是“

No_Retreats的专栏 1383

华为OD机试C卷“7游戏”C++模拟题解与实战技巧

在编程面试和算法练习中,模拟类题目是考察逻辑思维和代码实现能力的经典题型。其核心原理在于将现实规则或流程,通过循环、条件判断和状态管理等基础编程结构进行精确转化。这类题目技术价值显著,能有效锻炼需求分析、边界条件处理和健壮性编码等工程师核心能力,常见于各大公司机试及在线评测平台。本文以华为OD机试C卷高频题“7游戏”为具体应用场景,深入剖析其规则建模、循环控制与玩家状态切换等实现细节。通过拆解C++代码,分享如何高效判断数字包含7、设计测试用例以及规避常见错误,助力读者掌握模拟题的解题范式与实战技巧,从容

weixin_31309419的博客 270

数字游戏Bulls and Cows的解法

数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。查了网上很多关于这个游戏的帖子,大多都是计算机出题,人来猜。根据百度百科的介绍,有非常多种方法可以实现七步之内猜出答案。下面我就介绍其中最简单的一种也是我唯一会的一种方法。.........

weixin_44946764的博客 4630

15数字华容道解法 图解_数字华容道攻略(数字华容道最快解法图)

数字华容道有何解法4*4基本在一分钟左右,最快一次32秒。5*5、6*6还没测。4*4太简单,我就简单说一下了,后面5*5和6*6比较详细。4*4: 首先还原前两行。然后把9到12按下图...下面是6*6的解法。...数字华容道有何解法?高世奇:数字华容道有何解法?由于数字1-13的复原只利用6或4小区域循环移动,只涉及位置调整,与其它位置的数字无关,所以无论原始推盘如何排列,最终都可变换为Ⅰ、...

weixin_39903846的博客 1万+

基础算法之递归——5游戏及汉诺塔问题

那换一个数字呢,比如20,你会发现,从递推的角度去思考很难得出答案,我先说2 然后...后面有非常多中情况 ,规则虽然很简单,但是这个思路确实不太行得通。那么我们需要将上面的n-1个盘子先移动到临时柱子上,然后将第n个盘子移动到目标柱子上,最后再将上面的n-1个盘子移动到目标柱子上就可以了。其实,这个游戏我们小时候都玩过,如果只有三个盘子这个游戏是很简单的,但是盘子数量一旦多起来就不是很好处理了,但是如果我们逆向思考,用递归来解决,就很简单了。第二是,推导的过程是相同的,是可以复制的。

lumen1023的博客 686

【2024年华为OD机试】 (C卷,200分)- 7游戏(JavaScript&Java & Python&C/C++)

代码通过动态调整oneCount和twoCount,计算所有可能的划分方式。使用阶乘数组和排列公式高效计算不重复的排列数。最终输出 B 获胜的所有组合数。代码通过动态调整oneCount和twoCount,计算所有可能的划分方式。使用阶乘数组和排列公式高效计算不重复的排列数。最终输出 B 获胜的所有组合数。代码通过动态调整oneCount和twoCount,计算所有可能的划分方式。使用decimal模块处理大数运算,确保精度。最终输出 B 获胜的所有组合数。代码通过动态调整。

嵌入式技术开发 1142

LeetCode LCP 01. 猜数字 多种语言解法 C/C++/Python/Java

小A 和 小B 在玩猜数字。小B 每次从 1, 2, 3 中随机选择一个,小A 每次也从 1, 2, 3 中选择一个猜。他们一共进行三次这个游戏,请返回 小A 猜对了几次? 输入的`guess`数组为 小A 每次的猜测,`answer`数组为 小B 每次的选择。`guess`和`answer`的长度都等于3。

渡过寒冬 6580

消除游戏:数学规律与递归解法

时间复杂度O(log n)非常高效代码简洁优雅,易于理解体现了分治思想在算法中的应用是解决此类消除问题的经典方法理解这种递归关系对于解决类似问题非常有帮助,是算法思维的重要训练。

✨ 欢迎来到【Seal ^_^ 的CSDN博客】!✨ 8782

Leetcode299.猜数字游戏--两种解法

数字游戏的两种解法 题目链接 解题思路 本题目的题意很清楚,如果猜测的数字的某位和结果数字的相同位置相等,则公牛数加1。如果猜测的数字的为结果数字中存在的数字但位置不同,则母牛数目加1并且结果数字中该位置被抵消。到这里,我们很显然可以使用HashMap解决此问题。 方法一 这是常规思路,即用HashMap去记录结果数字中存在的数字个数即可。 class Solution { public String getHint(String secret, String guess) { i

qq_47373183的博客 895

华为OD机试Python - 7游戏

A、B两个人玩7游戏游戏规则为:A先报一个起始数字 X(10 ≤ 起始数字 ≤ 10000),B报下一个数字 Y (X - Y < 3),A再报一个数字 Z(Y - Z < 3),以此类推,直到其中一个到7,到7即为胜者;在B赢得比赛的情况下,一共有多少种组合?

qq_40642440的博客 153

299. 猜数字游戏(简单题)

题目描述: 你正在和你的朋友玩 猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。 请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。 ...

闭关修炼 920
上一篇: 寒假第四周
下一篇: 在VMWare 4.5.2上安装FreeBSD 5.3时的一个问题和解决方案
zweily
博客等级 码龄24年 2粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值