浅浅水一下题解
浅浅做一下题解 c++选手不提供代码了 但是给大家找了提交平台)
题目一:
结论:若 (n%m+1)==0] 则先手必败,否则先手必胜
解释:首先假设n=m+1,这个时候无论先手第一次拿多少个,由于剩下的物品数量一定是小于等于m(一次所能取的最大石子数)的,所以后手一定可以一次拿完,所以这个时候先手必败。
理解完n=m+1之后,拓展到n是m+1的倍数,同理,无论先手一次拿多少个物品,后手总是可以做出这样的策略:拿的物品和先手加在一起恰好是m+1(由于一次最多只能取m个,只需要一直保持至少需要取两次才能取完,这样就能保证最后只能由自己拿完,也就是让自己处于必胜的状态),这样若干回合之后一定又会回到我们说的第一种情况,先手必败。所以结论得证。
Ps:此题目为bash(巴什)博弈,有兴趣的可以百度一下
原题链接:https://leetcode-cn.com/problems/nim-game/
题目二:
根据题目中的例子:XXVII 可以转化为10+10+5+1+1=27。这是不考虑4、9、40、90、400、900的情况
把这类特殊情况看成-1+5、-1+10、-10+50、-10+100、-100+500、-100+1000,即对s[i+1](s[i]的下一个元素)进行判断,若s[i+1]>s[i],则减去s[i]对应的值,反之则加上s[i]对应的值。例如:XXIV 可以转化为10+10-1+5=24,XLVII可以转化为-10+50+5+1+1=47
思路明确之后写一个函数fun()转化单个字母,然后每次在循环里调用fun(s[i])以及fun(s[i+1])即可,有的语言可能需要判断边界,让循环到i<length-1就停止,因为最后一个元素s[length-1]直接加在sum里就行了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!