zcmu-1646 盒子游戏
E - 盒子游戲
有兩個(gè)相同的盒子,其中一個(gè)裝了n個(gè)球,另一個(gè)裝了一個(gè)球。Alice和Bob發(fā)明了一個(gè)游戲,規(guī)則如下:
Alice和Bob輪流操作,Alice先操作。每次操作時(shí),游戲者先看看哪個(gè)盒子里的球的數(shù)目比較少,然后清空這個(gè)盒子(盒子里的球直接扔掉),然后把另一個(gè)盒子里的球拿一些到這個(gè)盒子中,使得兩個(gè)盒子都至少有一個(gè)球。如果一個(gè)游戲者無(wú)法進(jìn)行操作,他(她)就輸了。下圖是一個(gè)典型的游戲:
Alice Bob Alice (5,1)----->(2,3)----->(1,2)----->(1,1)面對(duì)兩個(gè)各裝一個(gè)球的盒子,Bob無(wú)法繼續(xù)操作,因此Alice獲勝。你的任務(wù)是找出誰(shuí)會(huì)獲勝。假定兩人都很聰明,總是采取最優(yōu)策略。
輸入最多包含300組測(cè)試數(shù)據(jù)。每組數(shù)據(jù)僅一行,包含一個(gè)整數(shù)n(2<=n<=109)。輸入結(jié)束標(biāo)志為n=0。
對(duì)于每組數(shù)據(jù),輸出勝者的名字
Hint
思路:找規(guī)律,博弈的題目 當(dāng)輸入的數(shù)等于2^i-1的時(shí)候,是Bob贏(yíng)。
代碼:
#include<iostream> #include<cmath> using namespace std; int main() { int n,i; while(cin>>n&&n!=0) { int k=0; for(i=0;;i++) { if(pow(2,i)-1==n) { k=1; break; } else if(pow(2,i)-1>n) break; } if(k==1) cout<<"Bob"<<endl; else cout<<"Alice"<<endl; } return 0; }
總結(jié)
以上是生活随笔為你收集整理的zcmu-1646 盒子游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java listview用法_Java
- 下一篇: 美团面试题:Hashmap的结构,1.7