演算法學習之路|歐幾里得遊戲

kissjz發表於2018-02-26

小明和小紅在玩歐幾里得遊戲。他們從兩個自然數開始,第一個玩家小明,從兩個數的較大數中減去較小數的儘可能大的正整數倍,只要差為非負即可。然後,第二個玩家小紅,對得到的兩個數進行同樣的操作,然後又是小明。就這樣輪流進行遊戲,直至某個玩家將較大數減去較小數的某個倍數之後差為0為止,此時遊戲結束,該玩家就是勝利者。
輸入格式
輸入包含多組測試資料。每組輸入兩個正整數,表示遊戲一開始的兩個數,遊戲總是小明先開始。
當輸入兩個0的時候,輸入結束。
輸出格式
對於每組輸入,輸出最後的勝者,我們認為他們兩個都是頂尖高手,每一步遊戲都做出了最佳的選擇。
具體輸出格式見輸出樣例。
樣例輸入
34 12
15 24
0 0
樣例輸出
xiaoming wins
xiaohong wins
解題思路
簡單博弈題:誰能拿到主動權誰就能掌握勝局(畢竟兩人都絕頂聰明),拿到主動權的意思就是你有多種選擇,也就是大數是小數的兩倍以上。

#include<stdio.h>
int main()
{
    int a,b,flag,t;
    while(scanf("%d%d",&a,&b)!=EOF&&a&&b)
    {
        flag=0;
        while(a!=b)
        {
            if(a<b)
            {
                t=a;
                a=b;
                b=t;
            }
            flag++;
            if(a/b>=2)
            {
                break;
            }
            a=a-b;
        }
        if(flag%2==0)
             printf("xiaohong wins
");
        else
            printf("xiaoming wins
");
    }
}


相關文章