题目描述
girl有一天遇见了boy,于是他们开始玩游戏。
girl和boy初始各有一个正整数A和B,并且他们共同设置了一个阈值L。
然后游戏就开始了,对于每一局操作的人,假设他手上拿着的是数字x,对手手上拿着的是数字y
(记这一局开始时y的数值为y0),那么:
1、如果x>L,那么他就胜利了,否则进入步骤2
2、他会给对手的数值加上x(即),如果此时对手手上的数值y大于等于2y0,那么这一轮结束轮到对手操作,否则继续执行步骤2
由于boy爱慕着girl,所以boy想知道当girl先手或后手时能否胜利。
输入
一行三个正整数A,B和L,分别表示girl初始的数字,boy初始的数字和阈值。
输出
一行两个字符串'Yes'或'No',分别表示girl先手以及后手时能否胜利,如果可以则输出'Yes',否则输出'No'(不包含单引号)。
样例输入
232 42 9483
样例输出
No No
----------------------------------------------------------------------------------------------------题目来源:牛客网:Wannafly挑战赛28 -----------------------
题目分析:
这道题目主要考察思维和逻辑能力.
此题主要应去分析(女孩优先,男孩优先)这两种情况.
以女孩优先为例:
首先应该判断女孩手中数字girl_number是否大于公共值L.
- 若girl_number大于公共值L则女孩获胜.
- ①girl_number不大于公共值L,则进行操作2.为男孩的数字加girl_number直到updata_boy_number大于等于2*boy_number.
此时男孩手中的数字boy_number已经变为更新后的updata_boy_number.
②判断boy_number是否大于公共值L若大于则男孩获胜,否则为女孩的数字加boy_number直到updata_girl_number大于等于 2*girl_number.此时女孩手中的数字girl_number已经更新为updata_girl_number.
3.返回步骤1,直到出现获胜者.
注意事项:
- L的值是一个固定值
- 男孩和女孩手中的数字是一直变化的.
- 注意格式问题,女孩先手结果后面为空格,女孩后手结果后面为换行.
参考代码:
#include<stdio.h>
void result(long long girl_number,long long boy_number,long long L,long long const_flag)
//const_flag用于标记女孩是先手还是后手,先手为0,后手为1
{
long long updata_girl_number;
long long updata_boy_number;
long long flag=const_flag; //flag用于判断该谁进行操作,0为女孩,1为男孩
while(1)
{
if(const_flag==0&&girl_number>L)
{
if(const_flag==1)
printf("Yes\n");
else
printf("Yes ");
break;
}
if(flag==0)
{
//updata_girl_number=girl_number;
updata_boy_number=boy_number;
while(updata_boy_number<2*boy_number)
{
updata_boy_number+=girl_number;
}
flag=1;
boy_number=updata_boy_number;
}
if(boy_number>L)
{
if(const_flag==1)
printf("No\n");
else
printf("No ");
break;
}
if(flag==1)
{
updata_girl_number=girl_number;
while(updata_girl_number<2*girl_number)
{
updata_girl_number+=boy_number;
}
flag=0;
girl_number=updata_girl_number;
}
if(girl_number>L)
{
if(const_flag==1)
printf("Yes\n");
else
printf("Yes ");
break;
}
}
}
int main()
{
long long boy_number;
long long girl_number;
long long L;
scanf("%lld %lld %lld",&girl_number,&boy_number,&L);
result(girl_number,boy_number,L,0);
result(girl_number,boy_number,L,1);
return 0;
}