取石头

这是一个关于两人取石子游戏的问题,甲乙两人轮流取石子,甲先取,每次最多取m个,最少取一个。如果轮到某人取时没有石子了,那么该人获胜。给定石子总数n和最大取石子数m,程序需要判断先手甲是否能赢。通过分析得出公式,当n除以m加1的余数为0时,先手输(LOSE),否则先手赢(YES)。代码实现中,通过输入n和m,根据这个规律判断并输出结果。

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

取石头

C时间限制:3000 毫秒 |  C内存限制:3000 Kb

题目内容:

 "有甲乙两个人玩取石子游戏,共有n个石子(1<=n<=30000)两个人轮流取,甲先取.每次最多取m个(1<=m<=30000)最少取一个,当轮到谁取的时候没有石子了,谁就赢.

比如4个石子,每次最多取3个,那末先取的人(甲)一定赢n和m谁大没有限制.)

(甲拿走3个,乙只拿走1个,下面轮到甲了,但是没有石子了,甲赢了.)

现在要求你写一个程序,输入n(总的石子个数),最多可以取的石子个数m,输出甲(先取的人)是否会赢,会赢的话输出YES,否则输出LOSE.

我们这里假设甲乙两个人都采取最好的策略,也就是甲乙都非常想赢而且足够聪明.

比如输入11 4 输出LOSE"

输入描述

整数n m, 空格隔开

输出描述

YES或者LOSE

输入样例

11 4

输出样例

LOSE


这道题先设n和m的二元关系为f(n,m),可以推出式子 f(n,m) = !(f(n-1,m)&&f(n-2,m)........&&f(n-m,m)); 又根据题意我们可以推出n为1时绝对是LOSE,所以其实可以推出一个规律if(n % m+1 == 0)   f(n,m) = 1;   else