P1290 欧几里得的游戏(博弈论)

博弈论是真的难!?

给你两个数,每次只能从大的那个减去小的数的正整数倍,先得到零的人获胜

分析一下,(假设为x,y,且x>y),x=ky+z,若k>=2,那么我(是不是就可以为所欲为了)想一下减完或者,留一个给对手减是不是都行,然后我再往后分析下,我不就必胜了么?

所以遇到了这种情况或者我可以直接赢的情况(x%y==0)直接输出就好了,否则再找这种情况不就得了(除了这两种情况,我只能规规矩矩的减,正整数倍)

复制代码
 1 #include<iostream>
 2 using namespace std;
 3 
 4 bool fun(int &a,int &b)//返回1就出现了赢家
 5 {
 6     int t1=max(a,b);
 7     int t2=min(a,b);
 8     a=t2;
 9     b=t1%t2;
10     if(t1%t2)//表示非整除
11     {
12         if(t1/t2>=2)//不能整除但是系数大于0也结束
13             return 1;
14         else//继续
15             return 0;
16     }
17     else
18     {
19         return 1;//能整除就结束
20     }
21 }
22 int main(void)
23 {
24     int c;
25     cin>>c;
26     while(c--)
27     {
28         int a,b;
29         cin>>a>>b;
30         bool flag=1;//1表示stan嬴
31         while(!fun(a,b))
32         {
33             flag=!flag;
34         }
35         if(flag==1)
36             cout<<"Stan wins"<<endl;
37         else
38             cout<<"Ollie wins"<<endl;
39     }
40     return 0;
41 }
复制代码

 

posted on   greenofyu  阅读(204)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示