盒子游戲(湖南省第七屆大學生計算機程序設計競賽)

盒子游戲
Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u

Description

有兩個相同的盒子,其中一個裝了n個球,另一個裝了一個球。Alice和Bob發明了一個遊戲,規則如下:Alice和Bob輪流操作,Alice先操作每次操作時,遊戲者先看看哪個盒子裏的球的數目比較少,然後清空這個盒子(盒子裏的球直接扔掉),然後把另一個盒子裏的球拿一些到這個盒子中,使得兩個盒子都至少有一個球。如果一個遊戲者無法進行操作,他(她)就輸了。下圖是一個典型的遊戲: 
面對兩個各裝一個球的盒子,Bob無法繼續操作,因此Alice獲勝。你的任務是找出誰會獲勝。假定兩人都很聰明,總是採取最優策略。

Input

輸入最多包含300組測試數據。每組數據僅一行,包含一個整數n(2<=n<=10^9)。輸入結束標誌爲n=0。

Output

對於每組數據,輸出勝者的名字。

Sample Input

2 
3 
4 
0

Sample Output

Alice 
Bob 
Alice


博弈論,核心思路就是本人操作後,留下的大數不能是偶數。
如果大數是偶數,則可以平分,後面的人則無法操作了(要捨棄小得數,現在兩數相同,則無法捨棄),即贏了。
也就是說當前大的數爲奇數,則肯定可以分爲一個奇數,一個偶數,如果分出來的數是偶數大,則接下來的人捨棄奇數,然後把偶數平分後則就贏了。
AC代碼:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int fun(int n)
{
    if(n==1)
    {
        return 0;
    }
    if(n%2!=0)
    {
        return fun(n/2);
    }
    return n/2;
}
int main()
{
    int n;
    while(true)
    {
        scanf("%d",&n);
        if(n==0)
        {
            break;
        }
        if(fun(n))
        {
            printf("Alice\n");
        }
        else
        {
            printf("Bob\n");
        }
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章