【每日一道智力题】之 轮流取石子(简单的尼姆博弈)

news2024/10/5 17:15:54

题目:

一共有N颗石子(或者其他乱七八糟的东西),每次最多取M颗最少取1颗,A,B轮流取,谁最后会获胜?(假设他们每次都取最优解)。

解答:

结论:

假如A先取,N<M,A获胜;

      N>M,若N能被(M + 1)整除时,A失败;

         若N不能被(M + 1)整除时,A获胜;

假如B先取,(同上);

分析:(以A先手为例)

N<M时,A一次拿完(不可能给B留机会,前提就是每次取最优),不会给B留机会;

N>M时,A要想赢,必须要在自己倒数第二次取完的时候还剩下(M + 1)颗石子(此时A和B还可以再取一次就可以分出胜负游戏就结束了),这样不论B取几颗,A都获胜!但是要怎样才能控制最后一轮的石子数量?

分两种情况分析,

  1. N不能被(M + 1)整除,A先拿走n颗石子就可以使得剩下的石子数量是(M + 1)的整数倍,那么下一次B拿走任意k颗石子时,A就拿走(M + 1)- k颗石子。这样不论B怎么拿A总能控制剩下的石子数量是(M + 1)的整数倍,那么最后一轮一定剩下(M + 1)颗石子;

  1. N能被(M + 1)整除,A就认输吧。。。(B除非傻才会让A赢)无论A怎么拿,B可以控制石子数量(即当B拿完后总能使剩下的石子数量是(M + 1)的整数倍),在最后一轮之前B拿完后还剩(M + 1)颗,A拿多少颗都是输。

实际上,这就仅仅是运用了小学数学:余数永远比除数小这个特点

分析完了之后,我们就拿长安大学ACM的一道题来练练手吧!

问题描述:

学校会每周来检查一次宿舍,一般情况大多宿舍都是轮流安排值日。但是在1205宿舍,Alex想玩点「新花样」,他对Bob说:咱们来玩一个游戏吧,输了那个人去值日。
游戏规则是这样的:一开始有n个石子,Alex和Bob两个人轮流取石子,每次至少取一个至多取m个。取到最后一个石子的人获胜,也就是最后不能取的那个人输。
假设两个人都非常聪明,每次做出的都是最优选择。最开始Alex先取,问哪个人最终能获胜。
输入
输入第一行为一个整数T,表示一共有T组数据。 接下来有T行,每行有两个整数n(1 ≤ n ≤ 109)和m(1 ≤ m ≤ 109),中间用一个空格隔开。
输出
对于每组数据输出游戏最终获胜者的名字。
样例输入

3 7 3 5 4
样例输出
Alex Bob

下面我们就用c语言来实现这个代码:

#include<stdio.h>
int main()
{
    int T=0;
    int n,m;
    scanf("%d",&T);
    int i=0;
    for(i=0;i<T;i++)
    {
        scanf("%d %d",&n,&m);
        if(m>n||n%(m+1)!=0)
        {
            printf("Alex\n");
        }
        else
        {
        
                printf("Bob\n");
        }
    }
 } 

结果:

总结:

今天我们通过一道题目,大概的了解了简单的尼姆博弈,但是这个博弈到底是什么,怎么使用,我将会在明天的每日一题中进行深入讲解!这就是今天的每日一道智力题,如果对大佬们有帮助的话,麻烦帮忙点赞+关注哦😛!您的支持是我创造的动力!谢谢大佬们!😉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/170045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

告诉大家几个好用的功能

功能一&#xff1a;打开通知面板/月历面板 WinN的作用是调出通知面板&#xff0c;由于Windows 11将月历与通知面板合在了一起&#xff0c;因此它的另一项功能&#xff0c;就是——打开月历。 功能二&#xff1a;WindowsW:启用小组件面板 如果我们需要用到系统自带的小组件&am…

WC2023游记

今年&#xff0c;我势必打破铜牌魔咒 Day -?~? 虽然已年及高二&#xff0c;但WC的讲课还是没有听懂多少&#xff0c;这段时间&#xff0c;北师大还有一名E队来我校训练&#xff0c;我只能感慨&#xff1a;“如果一个选手比你强&#xff0c;还比你小&#xff0c;那你就再也打…

51 种 AI 工具,生活、编程、内容创建都应该使用它

AI 正在席卷全球 &#x1f525;&#x1f525;&#x1f525; 它具有无限的潜力&#xff0c;并将改变我们的生活&#xff0c;让生活变得更美好。这项技术将迅速改进&#xff0c;您今天可以使用许多工具来提高您的工作效率&#xff0c;帮助您完成工作&#xff0c;为您提供有关许多…

单网口ubuntu主机配置virt-manager传统桥接bridge网络

单网口ubuntu主机配置virt-manager传统桥接bridge网络 虚拟机的网络桥接bridge模式往往需要物理宿主机有两个网口&#xff0c;一个网口1连接外网配置ip&#xff0c;另一个网口2空闲不配置ip&#xff0c;在virt-manager里配置虚拟机的网卡绑定网口2&#xff0c;从而实现虚拟机桥…

81.门控循环单元(GRU)以及代码实现

1. 关注一个序列 做RNN的时候&#xff0c;处理不了太长的序列&#xff0c;因为把整个序列信息全部放在隐藏状态中&#xff0c;所有东西都放进去&#xff0c;当时间步很长的话&#xff0c;隐藏状态就会累积太多东西&#xff0c;就可能对很前面的信息不那么容易抽取出来了。 所…

Aftermath:一款针对macOS的免费开源事件响应框架

关于Aftermath Aftermath是一款针对macOS的事件响应框架&#xff0c;该工具基于Swift语言开发&#xff0c;是一款完全免费且开源的网络安全事件响应框架。 在Aftermath的帮助下&#xff0c;广大研究人员可以轻松收集并分析受感染主机的数据。除此之外&#xff0c;在理想情况下…

“深度学习”学习日记。误差反向传播法--Affine/Softmax层的实现

2023.1.17 Affine层&#xff1a; 在神经网络的正向传播中&#xff0c;为了计算加权信号的总和&#xff0c;使用矩阵乘积运算。 比如&#xff1a; import numpy as npx np.arange(6).reshape(2, 3) # (2,3) w np.arange(6).reshape(3, 2) # (3,2) b np.arange(4).resha…

LeetCode083_83. 删除排序链表中的重复元素

LeetCode083_83. 删除排序链表中的重复元素 一、描述 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1…

虚拟机或Linux安装Nginx及本地指定虚拟机域名

安装必要工具和依赖 yum -y install wget gcc gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel -----------------------------------废话开始------------------------------------------------- 上面这句话的意思:以下当废话 yum ---在线安装命令 inst…

82.长短期记忆网络(LSTM)以及代码实现

1. 长短期记忆网络 忘记门&#xff1a;将值朝0减少输入门&#xff1a;决定不是忽略掉输入数据输出门&#xff1a;决定是不是使用隐状态 2. 门 3. 候选记忆单元 4. 记忆单元 5. 隐状态 6. 总结 7. 从零实现的代码 我们首先加载时光机器数据集。 import torch from torch imp…

基于python手撕实现BP 神经网络实现手写数字识别(不调库,附完整版本代码)

本项目使用python实现全连接网络和梯度优化 方向传播并且实现了 手写数字识别项目: 神经网络 model 先介绍个三层的神经网络,如下图所示输入层(input layer)有三个 units( 为补上的 bias,通常设为 1)

安卓影像飞升时刻:vivo X90 Pro+打通HDR任督二脉

在手机产业中&#xff0c;大多数人会有一种刻板印象&#xff1a;一项新技术/功能&#xff0c;苹果发布会上展示意味着已经成熟&#xff0c;具有很高的产品完成度&#xff0c;好用且有效&#xff1b;而安卓厂商在发布会上展示出的一些炫酷技术&#xff0c;往往还需要时间观望&am…

多目标建模算法PLE

1. 概述 在现如今的推荐系统或者搜索中&#xff0c;都存在多个目标&#xff0c;多目标的算法在现如今的系统中已然成为了标配。在多目标的建模过程中&#xff0c;如果不同的学习任务之间较为相关时&#xff0c;多个任务之间可以共享一部分的信息&#xff0c;这样最终能够提升整…

Vue7-el和data的两种写法

1.el的两种写法 1创建Vue实例的时候通过el指定属性 2. 创建Vue实例之后&#xff0c;通过vm.$mount(#demo)进行挂载 console.log(v):此处的v是Vue的实例对象 在往下看__proto__属性&#xff0c;这里是Vue构造类的方法&#xff0c;其中的方法vue实例都可以使用&#xff0c;比如$…

Spring cache整合Redis详解 动态设置失效时间

文章目录1.spring cache简介2.spring cache集成redis3.spring cache与redisTemple统一格式4.SpEL标签5.Cacheable注解实现6.CachePut注解实现7.CacheEvict注解实现8.Caching注解实现9.自定义key生成器KeyGenerator10.自定义前缀CacheKeyPrefix11.多个CacheManager实现不同失效时…

【微信小程序】收藏功能的实现(条件渲染、交互反馈)

&#x1f3c6;今日学习目标&#xff1a;第十九期——收藏功能的实现(条件渲染、交互反馈) &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰预计时间&#xff1a;35分钟 &#x1f389;专栏系列&#xff1a;我的第一个微信小程序 文章目录…

django框架

目录简介MVC与MTV模型MVCMTV创建项目目录生命周期静态文件配置&#xff08;无用&#xff09;启动django[启动](https://www.cnblogs.com/xiaoyuanqujing/articles/11902303.html)路由分组无名分组有名分组路由分发反向解析反向解析结合分组名称空间re_path与path自定义转换器视…

vue3项目怎么写路由 + 浅析vue-router4源码

在SPA项目里&#xff0c;路由router基本是前端侧处理的&#xff0c;那么vue3项目中一般会怎么去写router呢&#xff0c;本文就来讲讲vue-router4的一些常用写法&#xff0c;以及和Composition API的结合使用&#xff0c;同时简单讲讲实现原理&#xff0c;让你轻松理解前端route…

【04】FreeRTOS的任务挂起与恢复

目录 1.任务的挂起与恢复的API函数 1.1任务挂起函数介绍 1.2任务恢复函数介绍&#xff08;任务中恢复&#xff09; 1.3任务恢复函数介绍&#xff08;中断中恢复&#xff09; 2.任务挂起与恢复实验 3.任务挂起和恢复API函数“内部实现”解析 3.1vTaskSuspend() 3.2&#…

Prometheus基础

一、何为Prometheus Prometheus受启发于Google的Brogmon监控系统&#xff08;相似的Kubernetes是从Google的Brog系统演变而来&#xff09;&#xff0c;从2012年开始由前Google工程师在Soundcloud以开源软件的形式进行研发&#xff0c;并且于2015年早期对外发布早期版本。2016年…