zoukankan      html  css  js  c++  java
  • HDU 1525

    题意

    Stan和Ollie玩游戏,Stan先手。给出两个数字,可以用大数减去小数的整数倍,要求不能减到小于0。谁先将一个数字减到0,谁获胜。

    思路

    博弈
    假设 a > b
    比赛的时候想到了关于a - b > b ( a > 2 * b )状态下,可以决定必胜、必败态,故若a > 2 * b为必胜态。
    若a%b == 0, a可以减去b的整数倍变为0,故谁达到这个状态即必胜态

    但是当时没考虑周全,这里应该用循环求解,谁达到必胜态则退出循环。

    AC代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
        int a, b;
        while( scanf("%d%d", &a, &b) == 2 && a && b ){
            if( a < b ) swap(a, b);
            bool first = true;
            for(;;){
                if( a % b == 0 || a > 2 * b ) break;
                a -= b;
                swap(a,b);
                first = !first;
            }
            if( first ) puts("Stan wins");
            else puts("Ollie wins");
        }
        return 0;
    }
    
  • 相关阅读:
    java浅谈
    学习心得 六 修改
    学习心得 六
    学习心得 五
    学习心得 四
    学习java心得 三
    学习java心得 二
    学习java心得 一
    学习前言
    课程进展
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740556.html
Copyright © 2011-2022 走看看