题目描述


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.

  1. girl_number大于公共值L则女孩获胜.
  2. ①​​​​​​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,直到出现获胜者.

注意事项:

  1. L的值是一个固定值
  2. 男孩和女孩手中的数字是一直变化的.
  3. 注意格式问题,女孩先手结果后面为空格,女孩后手结果后面为换行.

参考代码:

#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;
}