1. 程式人生 > >小石壩第一次月賽:A

小石壩第一次月賽:A

題目描述


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