4.巴什博弈

本文介绍了巴什博弈的游戏规则,即两名玩家每次从一堆石头中取出1到3个,最后拿走石头的人获胜。当石头数量为4的倍数时,先手必败;否则,先手可以通过取走n%4个石头来确保胜利。这种策略使得对手始终处于取4的倍数石头的状态,直至先手获胜。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1300 · 巴什博弈
算法
简单
通过率
55%

描述
你正在和朋友玩一个游戏:桌子上有一堆石头,每一次你们都会从中拿出1到3个石头。拿走最后一个石头的人赢得游戏。游戏开始时,你是先手。
假设两个人都绝对理性,都会做出最优决策。给定石头的数量,判断你是否会赢得比赛。

举例:有四个石头,那么你永远不会赢得游戏。不管拿几个,最后一个石头一定会被你的朋友拿走。

样例
样例 1:
输入:n = 4
输出:False
解析:先手取走1,2或者3,对方都会取走最后一个

样例 2:
输入:n = 5
输出:True
解析:先手拿1个,必胜

class Solution {
public:
    /**
     * @param n: an integer
     * @return: whether you can win the game given the number of stones in the heap
     */
    bool canWinBash(int n) {
        // Write your code here
       /**
        剩余石子数正好是4的倍数的时候,谁先拿必败,
        因此算除以四的余数,如果有余数,
        那么第一个人就可以先拿这些余数,
        那么对手就会成为第一个开始在4倍数石头里面拿石头的人,
        也就是他会输
     
     4=>4%4==0,我先拿只能拿1/2/3个,然后他拿最后的3/2/1 俺必输
     5=>5%4==1,我可以先拿余数1,然后他从剩余的4个拿1/2/3,最后剩下的都是俺的
     10=>10%4==2,我可以先拿余数2,他去1/2/3,还剩7/6/5,我再取7%4==3/6%4==2/5%4=1,
     还剩4个,这时无论他取1/2/3,俺都是最后一个[把他最后赶到从4个里选]
    **/
    if(n%4==0){
        return false;
    }else{
        return true;
    }
    

    }    
};

/*
1+3=4;只要最后对方拿时,剩余石头数是4,则我方必赢,因为无论对方拿几,我方都能一次拿完
题目变为:n能不能变为4,由此发现只要我们首次取n%4个石头,
对方就会从4的倍数开始取(因为我们取走了余数,剩余一定被4整除),那么接下来,
无论对方取几(1,2,3都不大于4),我们总能让对方一直处于4的倍数状态,直到获胜,
因此题目最终变为:n能否被4整除;如不能则我方获胜,如果能则我方失败;

解题思路
//如果n小于4,则一定是先手拿走最后一个石头
//如果n等于4,或者说是n是4的倍数,则无论先手一开始取走几个a,
后手则会取4-a,从而可使后手拿走最后一个石头。
//如果n大于4,且不是4的倍数,则可以先手拿走n取4的余数,则同上一步,先手可拿走最后一个石头。
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值