c语言编程的数学问题

题目描述一堆叠放的卡片有m个,现在有两个人,轮流从该堆中取卡片,每次最多取n个,至少取一个。规定拿到最后一个卡片的人赢。两人都十分聪明,能做出对自己最有利的选择。输入多组... 题目描述
一堆叠放的卡片有m个,现在有两个人,轮流从该堆中取卡片,每次最多取n个,至少取一个。规定拿到最后一个卡片的人赢。两人都十分聪明,能做出对自己最有利的选择。
输入
多组数据,每组数据一行,包括正整数m,n(m > n)如题描述。
输出
输出占一行。如果第一个拿卡片的人能赢,则输出Yes,否则No。
样例输入
2 1
3 1

样例输出
No
Yes
展开
 我来答
hhanw
2013-11-30 · TA获得超过193个赞
知道小有建树答主
回答量:239
采纳率:0%
帮助的人:202万
展开全部
样例太极端了(n=1)
#include <stdio.h>

int main(int argc, char *argv[])
{
int m,n;

while(1){
scanf("%d %d",&m,&n);
if(m%(n+1)==0){
printf("No\n");
}else{
printf("Yes\n");
}
}
return 0;
}
更多追问追答
追问
能讲下思路吗
追答
n+1张卡片为一个“循环节”,即让前一个人拿p张卡片,另一个人总能拿(n+1-p)张卡片以是一个回合里有(n+1)张卡片被拿走。
去掉所有“循环节”,剩下的零头很关键。只要有零头,第1个人就可以一次性拿走零头,接下来是“循环节”,最后一张卡片有第1个人拿走。如果没有零头可拿,那么第1次拿卡片之后,相当于第2个人可以将零头一次拿走,从而取胜。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式