c语言编程的数学问题
题目描述一堆叠放的卡片有m个,现在有两个人,轮流从该堆中取卡片,每次最多取n个,至少取一个。规定拿到最后一个卡片的人赢。两人都十分聪明,能做出对自己最有利的选择。输入多组...
题目描述
一堆叠放的卡片有m个,现在有两个人,轮流从该堆中取卡片,每次最多取n个,至少取一个。规定拿到最后一个卡片的人赢。两人都十分聪明,能做出对自己最有利的选择。
输入
多组数据,每组数据一行,包括正整数m,n(m > n)如题描述。
输出
输出占一行。如果第一个拿卡片的人能赢,则输出Yes,否则No。
样例输入
2 1
3 1
样例输出
No
Yes 展开
一堆叠放的卡片有m个,现在有两个人,轮流从该堆中取卡片,每次最多取n个,至少取一个。规定拿到最后一个卡片的人赢。两人都十分聪明,能做出对自己最有利的选择。
输入
多组数据,每组数据一行,包括正整数m,n(m > n)如题描述。
输出
输出占一行。如果第一个拿卡片的人能赢,则输出Yes,否则No。
样例输入
2 1
3 1
样例输出
No
Yes 展开
1个回答
展开全部
样例太极端了(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;
}
#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个人可以将零头一次拿走,从而取胜。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询