HDU2516 取石子遊戲

來源:互聯網
上載者:User
Problem Description 1堆石子有n個,兩人輪流取.先取者第1次可以取任意多個,但不能全部取完.以後每次取的石子數不能超過上次取子數的2倍。取完者勝.先取者負輸出"Second win".先取者勝輸出"First win". 

Input 輸入有多組.每組第1行是2<=n<2^31. n=0退出. 

Output 先取者負輸出"Second win". 先取者勝輸出"First win". 
參看Sample Output. 

Sample Input 2 13 10000 0 

Sample Output Second win Second win First win///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////找規律:n =2時輸出second;

       n =3時也是輸出second;

       n =4時,第一個人想獲勝就必須先拿1個,這時剩餘的石子數為3,此時無論第二個人如何取,第一個人都能贏,輸出first;

       n =5時,first不可能獲勝,因為他取2時,second直接取掉剩下的3個就會獲勝,當他取1時,這樣就變成了n為4的情形,所以輸出的是second;

       n =6時,first只要去掉1個,就可以讓局勢變成n為5的情形,所以輸出的是first;

       n =7時,first取掉2個,局勢變成n為5的情形,故first贏,所以輸出的是first;

       n =8時,當first取1的時候,局勢變為7的情形,第二個人可贏,first取2的時候,局勢變成n為6得到情形,也是第二個人贏,取3的時候,second直接取掉剩下的5個,所以n =8時,輸出的是second;

        …………

       從上面的分析可以看出,n為2、3、5、8時,這些都是輸出second,即必敗點,仔細的人會發現這些滿足斐波那契數的規律,可以推斷13也是一個必敗點。

       n =12時,只要誰能使石子剩下8且此次取子沒超過3就能獲勝。因此可以把12看成8+4,把8看成一個站,等價與對4進行”氣喘操作“。

       又如13,13=8+5,5本來就是必敗態,得出13也是必敗態。

       也就是說,只要是斐波那契數,都是必敗點。

       所以我們可以利用斐波那契數的公式:fib[i]=fib[i-1]+fib[i-2],只要n是斐波那契數就輸出second。

 

代碼:

 

 #include<iostream>
using namespace std;
long long n,f[45]={2,3};
int main()
{
 int i;
 for(i=2;i<45;i++)
 {
  f[i]=f[i-1]+f[i-2];
 }
 while(scanf("%lld",&n)!=EOF)
 {
  if(n==0)
   break;
  for(i=0;i<45;i++)
  {
   if(f[i]==n)
   {
    cout<<"Second win"<<endl;
    break;
   }
  }
  if(i==45)
   cout<<"First win"<<endl;
 }
 return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.