zoukankan      html  css  js  c++  java
  • 取石子游戏

    取石子游戏

    链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1218


    时间限制: 1000 ms         内存限制: 65536 KB

    【题目描述】

    有两堆石子,两个人轮流去取。每次取的时候,只能从较多的那堆石子里取,并且取的数目必须是较少的那堆石子数目的整数倍,最后谁能够把一堆石子取空谁就算赢。

       比如初始的时候两堆石子的数目是25和7。

    25 7 --> 11 7 --> 4 7 --> 4 3 --> 1 3 --> 1 0

    选手1取 选手2取 选手1取 选手2取 选手1取

       最后选手1(先取的)获胜,在取的过程中选手2都只有唯一的一种取法。

       给定初始时石子的数目,如果两个人都采取最优策略,请问先手能否获胜。

     

    【输入】

    输入包含多数数据。每组数据一行,包含两个正整数a和b,表示初始时石子的数目。

       输入以两个0表示结束。

     

    【输出】

    如果先手胜,输出"win",否则输出"lose"

    【输入样例】

    34 12
    15 24
    0 0
    

    【输出样例】

    win
    lose

    题解:

       假设石子数目为(a,b)且a >= b,如果[a/b] >= 2则先手必胜,如果[a/b]<2,那么先手只有唯一的一种取法,此时交换两人顺序。[a/b]表示a除以b取整后的值。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int check(int m,int n)
    {
        if(m<n)return check(n,m);
        if(m/n>=2)return 1;
        else return !check(m-n,n);
        
    }
    int main(){
        int m,n;
        while(cin>>m>>n)
        {
            if(!m&&!n)break;
            if(check(m,n))cout<<"win"<<endl;
            else cout<<"lose"<<endl;
        }
    }
  • 相关阅读:
    二进制位运算
    Leetcode 373. Find K Pairs with Smallest Sums
    priority_queue的用法
    Leetcode 110. Balanced Binary Tree
    Leetcode 104. Maximum Depth of Binary Tree
    Leetcode 111. Minimum Depth of Binary Tree
    Leetcode 64. Minimum Path Sum
    Leetcode 63. Unique Paths II
    经典的递归练习
    案例:java中的基本排序
  • 原文地址:https://www.cnblogs.com/EdSheeran/p/7626995.html
Copyright © 2011-2022 走看看