问题描述:

  有一堆物品,共n个,两人轮流从这堆物品中取,规定每次至少取一个,至多m个,获胜条件分为两种,分别是最后取光者胜或者是最后取光者败。

分析:

  1.假如物品个数小于等于m个,那么第一个人就能一次取完。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  2.假如物品个数等于m加一个,第一个人取不大于m的任意个第二个人都能取完。

  3.假如物品个数为m+1的倍数,那么无论第一个人取多少个,第二个人都做到他取完之后物品剩余个数是m的倍数。

  4.假如物品个数不是m+1的倍数,那么第一个人一定能做到他取之后使得物品个数为m+1的倍数

  结论:物品个数为m+1的倍数时,先手必输。

代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    if(n%(m+1)==0)printf("2\n");
    else printf("1\n");
    return 0;
}

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄