java nim游戏_LeetCode 292. Nim游戏

article/2025/10/2 15:47:35

题目描述:

你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。

你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。

示例:

输入: 4

输出: false

解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;

因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。

思路

简单题,巴什博弈。

显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

对于巴什博弈,那么我们规定,如果最后取光者输,那么又会如何呢?

(n-1)%(m+1)==0则后手胜利

先手会重新决定策略,所以不是简单的相反行的

JAVA SOLUTION

class Solution {

public boolean canWinNim(int n) {

return n % 4 == 0 ? false : true;

}

}

扩展

威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从任一堆取至少一个或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

两个人如果都采用正确操作,那么面对非奇异局势,先拿者必胜;反之,则后拿者取胜。

那么任给一个局势, (a,b),怎样判断它是不是奇异局势呢?我们有如下公式:

math?formula=ak%20%3D%5Clfloor%20%5Cfrac%7Bk%7D%7B2%7D(1%2B%5Csqrt%7B5%7D)%20%5Crfloor%20%EF%BC%8C

math?formula=bk%3D%20ak%20%2B%20k%20%5Cspace%20%5Cspace%5Cspace%5Cspace%EF%BC%88k%3D0%EF%BC%8C1%EF%BC%8C2%EF%BC%8C...n)

指的是这样的一个博弈游戏,目前有任意堆石子,每堆石子个数也是任意的,双方轮流从中取出石子,规则如下:

1)每一步应取走至少一枚石子;每一步只能从某一堆中取走部分或全部石子;

2)如果谁取到最后一枚石子就胜。

判断当前局势是否为必胜(必败)局势:

把所有堆的石子数目用二进制数表示出来,当全部这些数按位异或结果为0时当前局面为必败局面,否则为必胜局面;

#include

using namespace std;

int temp[ 20 ]; //火柴的堆数

int main()

{

int i, n, min;

while( cin >> n )

{

for( i = 0; i < n; i++ )

cin >> temp[ i ]; //第i个火柴堆的数量

min = temp[ 0 ];

for( i = 1; i < n ; i++ )

min = min^temp[ i ]; //按位异或

if( min == 0 )

cout << "Lose" << endl; //输

else

cout << "Win" << endl; //赢

}

return 0;

}

斐波那契博弈

有一堆个数为n的石子,游戏双方轮流取石子,满足:

1)先手不能在第一次把所有的石子取完;

2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。

约定取走最后一个石子的人为赢家,求必败态。

这个游戏叫做斐波那契博弈,肯定和斐波那契数列:

math?formula=f%5Bn%5D%EF%BC%9A1%2C2%2C3%2C5%2C8%2C13%2C21%2C34%2C55%2C89%2C%E2%80%A6有密切的关系。如果试验一番之后,可以猜测:先手胜当且仅当n不是斐波那契数。换句话说,必败态构成斐波那契数列。


http://chatgpt.dhexx.cn/article/BNAS3P3D.shtml

相关文章

Nim游戏、3的幂、4的幂

&#x1f345; Java学习路线&#xff1a;Java学习路线 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、CSDN哪吒公众号作者✌ 、Java架构师奋斗者&#x1f4aa; &#x1f345; 百日刷题计划&#xff1a;第 12 / 100 天。 &#x1f345; 扫描主页左侧二维码&a…

【数论】博弈论 —— nim游戏

知识点 一 . nim游戏的数学定义 Nim游戏是博弈论中最经典的模型&#xff0c;它又有着十分简单的规则和无比优美的结论 。 Nim游戏是组合游戏(Combinatorial Games)的一种&#xff0c;准确来说&#xff0c;属于“Impartial Combinatorial Games”&#xff08;以下简称ICG&#…

【模板题】几种常见的Nim游戏(博弈论)

一、AcWing 891. Nim游戏 【题目描述】 给定 n n n堆石子&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以从任意一堆石子中拿走任意数量的石子&#xff08;可以拿完&#xff0c;但不能不拿&#xff09;&#xff0c;最后无法进行操作的人视为失败。 问如果两人都采用最优…

Kafka 为什么能那么快 | Kafka高效读写数据的原因

点击上方“服务端思维”&#xff0c;选择“设为星标” 回复”669“获取独家整理的精选资料集 回复”加群“加入全国服务端高端社群「后端圈」 无论 kafka 作为 MQ 也好&#xff0c;作为存储层也罢&#xff0c;无非就是两个功能&#xff08;好简单的样子&#xff09;&#xff0c…

【人人都懂密码学】一篇最易懂的Java密码学入门教程

密码与我们的生活息息相关&#xff0c;远到国家机密&#xff0c;近到个人账户&#xff0c;我们每天都在跟密码打交道&#xff1a; 那么&#xff0c;密码从何而来&#xff1f;生活中常见的加密是怎么实现的&#xff1f;怎么保证个人信息安全&#xff1f;本文将从这几方面进行浅谈…

Kafka必须掌握的核心技术--为什么吞吐量大、速度快?

点击上方“服务端思维”&#xff0c;选择“设为星标” 回复”669“获取独家整理的精选资料集 回复”加群“加入全国服务端高端社群「后端圈」 Kafka是大数据领域无处不在的消息中间件&#xff0c;目前广泛使用在企业内部的实时数据管道&#xff0c;并帮助企业构建自己的流计算应…

哪些软件问题也可导致硬盘录像机死机

硬盘录像机死机除了一些硬件上的问题之外&#xff0c;也有不少是由软件引起的。如&#xff1a; 1、病毒感染 病毒是计算机操作的大患&#xff0c;几乎人人恶之。病毒可以使计算机工作效率急剧下降&#xff0c;造成频繁死机、数据丢失、系统崩溃&#xff0c;甚至损坏主板、硬盘、…

导致硬盘录像机卡死的十大原因分析

硬盘录像机卡死除了一些技术上的问题之外&#xff0c;也有不少是由软件引起的。如&#xff1a; 1、病毒感染 病毒是硬盘录像机操作的大患&#xff0c;几乎人人恶之。病毒可以使硬盘录像机工作效率急剧下降&#xff0c;造成频繁死机、数据丢失、系统崩溃&#xff0c;甚至损坏主板…

谈项目管理和软件测试过程

谈项目管理和软件测试过程&#xff08;一&#xff09; 1. 软件测试在公司的组织保障是基础 1.1 研发部组织结构介绍 以华友公司研发部的组织结构为例&#xff0c;测试部门属于研发部副总裁直接管理&#xff0c;见如下结构图 公司研发部的组织结构图 …

NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装

一、NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起&#xff0c;传统的关系数据库在应付Web2.0网站&#xff0c;特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心&#xff0c;暴露了很多难以克服的问题&#xff1a; &#xff08;1…

软件公司面试总结

文章目录 面试1面试2面试3面试4面试5面试6 面试1 1、你先做个简单的自我介绍吧 我叫张三&#xff0c;2015年在重庆邮电大学毕业。我读的专业是电子信息。工作已经快5年了。 我上家公司的主营业务是在柬埔寨做移动支付钱包。 最近做的一个项目是聚合支付的项目&#xff0c;主要…

腾讯的硬盘里,有互联网的昨天今天和明天

作者&#xff1a;史中 来源&#xff1a;浅黑科技&#xff08;qianheikeji&#xff09; 2018年1月1日&#xff0c;太阳照常升起。 世界上所有的时钟合谋&#xff0c;把最后一个90后推过了18岁的门槛。对于这些年轻的面孔来说&#xff0c;自由的风终于如期而至&#xff0c;只是其…

机械硬盘与SSD固态硬盘性能的深度

从7200转硬盘升级到10000转的迅猛龙&#xff0c;那叫量变。从10000转的迅猛龙升级到SSD&#xff0c;这个叫质变。2者的差距是有些地方相当大&#xff0c;而有些却很接近&#xff0c;主要是难比较。经常听到有人说&#xff1a;我买2个黑盘组RAID 0&#xff0c;传输率也有接近250…

sudo rm-rf引发的惨案——Linux硬盘的分区和挂载

前言 前不久&#xff0c;刚使用组里的一台服务器&#xff0c;这台服务器平时用的人不多&#xff0c; 没有严格的管理机制&#xff0c;大家都使用同一个用户名进行远程连接&#xff0c;人人都有sudo权限。我因为对Linux不是非常熟悉&#xff0c;使用管理员权限下执行了一个删除…

DVR-硬盘录像机

硬盘录像机&#xff08;Digital Video Recorder&#xff0c;简称DVR&#xff09;&#xff0c;即数字视频录像机&#xff0c;相对于传统的模拟视频录像机&#xff0c;采用硬盘录像&#xff0c;故常常被称为硬盘录像机&#xff0c;也被称为DVR。 它是一套进行图像存储处理的计算…

[转]80后研制出世界最快硬盘:传输速度每秒1.5GB

传输速度每秒1.5GB&#xff0c;仅需3秒就能传输一张DVD光盘的数据&#xff0c;是普通硬盘速度的15倍。一秒钟可以访问31万次&#xff0c;而普通硬盘仅可以访问16次。这些数据&#xff0c;描绘着一款固态硬盘的卓越性能。研发出这款世界传输速度最快、性能最好的固态硬盘的&…

我们测了30款移动硬盘,却如此尴尬

我最近在研究移动硬盘&#xff0c;如果你也感兴趣不妨来看看我这些天的研究成果吧。不卖关子&#xff0c;我们发现不同品牌SDD移动硬盘间存在着很大差异&#xff0c;如果你非常在意读写速度就需要慎重选择了&#xff1b;而不同品牌HDD移动硬盘间在速度上并不存在巨大差异&#…

web安全攻防渗透测试实战指南

1. Nmap的基本 Nmap ip 6 ip Nmap -A 开启操作系统识别和版本识别功能 – T&#xff08;0-6档&#xff09; 设置扫描的速度 一般设置T4 过快容易被发现 -v 显示信息的级别&#xff0c;-vv显示更详细的信息 192.168.1.1/24 扫描C段 192.168.11 -254 上 nmap -A -T4 -v -i…

加速!加速!西数万转硬盘猛禽RAID测试

[迅猛龙的袭击] 西部数据猛禽系列在玩家们的心目里或许一直是高高在上&#xff0c;因为在西数之前的策略里&#xff0c;这个系列的产品都是列入到“企业级”里的&#xff0c;但随着高端玩家对硬盘性能的需求越来越高&#xff0c;“猛禽”这个代表极端性能的产品线&#xff0c;也…

xboxone硬盘坏的表现_你的机械硬盘有RV振动传感器吗?三款2.5寸HDD测试

机械硬盘人人都用&#xff0c;虽然SSD的价格逐年下降&#xff0c;可是就容量/价格比来说&#xff0c;离机械硬盘还有不少距离。尽管HDD有着大容量的优势&#xff0c;可是如今硬盘存储密度越来越高&#xff0c;磁头距离盘片太近&#xff0c;现在的硬盘也越来越脆弱&#xff0c;经…