zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    诸葛亮的后半生:狗笼子里挥舞丈八蛇矛
    一句话摘录
    【书摘】The Joshua tree epiphany
    玩具程序:bigInt
    旅行的力量
    记忆的力量
    快的力量
    Windbg学习笔记【4】
    戴尔笔记本win8全新安装
    悟透JavaScript
  • 原文地址:https://www.cnblogs.com/greenofyu/p/12232043.html
Copyright © 2011-2022 走看看