zoukankan      html  css  js  c++  java
  • 欧几里得游戏

    试题描述:

    欧几里德的两个后代Stan和Ollie在玩一个数字游戏,给定两个正整数M和N,从Stan开始,取其中较大的一个数,减去较小的数的正整数倍,当然,得到的数K不能小于0。然后是Ollie,对刚才得到的数K以及M和N中较小的那个数,再进行同样的操作,直到一个人得到了0,他就取得了胜利。下面是他们用(25,7)两个数游戏的过程:

    开始:25 7

    Stan:11 7 {18 7, 11 7, 4 7均有可能}

    Ollie:4 7

    Stan:4 3

    Ollie:1 3

    Stan:1 0

    Stan最后获得了胜利

    现在,假设两个人都能完美地进行操作,谁会取得最终的胜利呢?

    输入:

    第一行输入测试数据组数C
    以下C行,每行一组数据,包含两个正整数M和N,M和N的范围不超过long long范围。

    输出:

    对每组输入输出一行。
    如果Stan胜利,则输出“Stan wins”;否则输出“Ollie wins”。

    输入输出

    2
    25 7
    24 15

    Stan wins
    Ollie wins

    分析:如果输入中较小的已经为零,则为Ollie wins。如果n<m*2,则只有一种选择——继续递归。如果大的不止一倍,那就有多种选择,简单来说,如果(n%m,m)可以,那就(n%m,m),否则(n%m+m,m),这样下一个人就必输,自己也赢了。

    #include<bits/stdc++.h>
    using namespace std;
    int t, m, n;
    bool solve(int n, int m)
    {
        if (!m) return false;
        if (n/m==1) return !solve(m, n%m);
        else return true;
    }
    int main()
    {
        scanf("%d", &t);
        for (int i=1;i<=t;i++)
        {
            scanf("%d%d", &n, &m);
            if (solve(max(n,m),min(n,m)))
                printf("Stan wins
    ");
            else
                printf("Ollie wins
    ");
        }
    }
  • 相关阅读:
    XNA入门教程(一)
    SQL透视表
    java 远程ftp建立文件夹
    费事数列——我的理解
    OOP
    OOP2
    河内之塔
    获取页面上TextBox并改变它的值
    RMAN学习之三:归档模式有备份,丢失控制文件。
    SQL Server Error: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在或访问
  • 原文地址:https://www.cnblogs.com/chen-1/p/10033656.html
Copyright © 2011-2022 走看看