不知道怎么了,错的要死~~泥煤的蛋疼
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
//#define max(a,b) a>b?a:b
//#define min(a,b) a>b?b:a
using namespace std;
int main(void){
int k,t,i,j;
int m,n;
int large,smale;
while(scanf("%d%d",&m,&n)!=EOF,m||n){
//if(m==0||n==0){
//cout<<"Stan wins"<<endl;
//continue;
//}
large=max(m,n);
smale=min(m,n);
bool t;
t=true;
int digit=0;
while(smale!=0){
if(large/smale>=2)//刚开始把这个if语句写到外面啦结果一直wa
{
cout<<"Stan wins"<<endl;
digit=1;
break;
}
t=!t;
k=large%smale;//这里刚开始写成了减号结果一直超时,殊不知到1是就不用再减啦。。。
large=smale;
smale=k;
}
if(digit==0){
if(t!=true)
cout<<"Stan wins"<<endl;
else
cout<<"Ollie wins"<<endl;
}
}
return 0;
}
/*给定两堆石子,二人轮流取子,要求只能从石子数目较大的那一堆取子,
取子的数目只能是另一堆石子数目的倍数.最终使得某一堆数目为零的一方为
对于(a,b),如果a>b且a/b>=2,则(a,b)是关键状态
谁面对这个状态则谁必胜,动手模拟一下就知道啦
之后便是计算剩下的啦;
*/
网上的代码#include <iostream>#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <stdlib.h>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <functional>
using namespace std;
bool isStan;
void print()
{
if (isStan) printf("Stan wins\n");
else printf("Ollie wins\n");
}
int main()
{
int a,b,t;
while (scanf("%d%d",&a,&b),a!=0 || b!=0)
{
if (a<b)
{ t=b; b=a; a=t;}
isStan=1;
while (1)
{
if (a/b>=2)
{
print();
break;
}
t=a%b;
a=b;
b=t;
if (b==0)
{
print();
break;
}
isStan=1-isStan;
}
}
return 0;
}