ACM 2348 Euclid's Game http://acm.pku.cn/JudgeOnline/problem?id=2348

方法:若整除先者胜,若不然,GCD,看每次的商是否为1,若为1,i++,继续,判断他的奇偶性;

证明,若整除,显然,不然,若遇到m/n>1时,其中1、2的时候包含所有胜负,则做该判断的时候的人必胜

我最后更新的代码如下:
#include <iostream>
using namespace std;
int main ()
{
int n=0,m=0;
while (cin>>m>>n)
{
 if(m==0&&n==0)
  break;
   int i=0;
   int temp=0;
   if (m<n)
   {

    temp=m;
    m=n;
    n=temp;
   }
   if(m%n==0)
    cout<<"Stan wins"<<endl;
  else 
  {
    while (n)
    { 
  if (m/n==1)
  {
     int lum=n;
     n=m%n;
     m=lum;
     i++;
  }
  else 
   break;
    }
   if (i%2==0)
     cout<<"Stan wins"<<endl;
   else 
      cout <<"Ollie wins"<<endl;
   }
}
return 0;
}
但我不明白我之前的代码错在哪儿了,如果有人知道的话麻烦指点小弟一下,小弟将不胜感激,我先前的代码如下:
#include <iostream>
using namespace std;
int main ()
{
int n=0,m=0;
while (cin>>m>>n)
{
 if(m==0&&n==0)
   break;
    int i=0;
    int temp=0;
    if (m<n)
    {

     temp=m;
     m=n;
     n=temp;
    }
    if((m-n)>=n||m==n)
     cout<<"Stan wins"<<endl;
  else 
  {
     while (m%n!=0)
     { 
      int lum=n;
      n=m%n;
      m=lum;
      i++;
 }
 
    if (i%2==0)
      cout <<"Ollie wins"<<endl;
    else 
       cout<<"Stan wins"<<endl;
    }
    }
return 0;
}

posted on 2011-05-06 19:46  _Clarence  阅读(147)  评论(0编辑  收藏  举报

导航