文章目录
不知道怎么了,错的要死~~泥煤的蛋疼
题意:
给定两堆石子,二人轮流取子,要求只能从石子数目较大的那一堆取子,
取子的数目只能是另一堆石子数目的倍数.最终使得某一堆数目为零的一方为
对于(a,b),如果a>b且a/b>=2,则(a,b)是关键状态
谁面对这个状态则谁必胜,动手模拟一下就知道啦
之后便是计算剩下的啦;
上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| // // 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; }
|
下面和网上的一段一对比:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| 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; }
|