zoukankan      html  css  js  c++  java
  • C++ CF119A Epic Game

    题目描述

    Simon和Antisimon在玩石子游戏。

    共有n颗石子,Simon先拿。

    Simon能拿当前n和a的最大公约数,Antisimon能拿当前n和b的最大公约数。

    当有一个人不能拿时(n=0)那个人就输了。

    求谁赢了。

    输入输出格式

    输入格式

    一行,a,b,n(1<=a,b,n<=100)

    输出格式

    一行,如果Simon赢了,输出0;Antisimon赢了,输出1.

    说明

    gcd(0,x)=gcd(x,0)=x;

    对于样例1:

    Simon拿gcd(3,9)=3颗

    Antisimon拿gcd(5,6)=1颗

    Simon拿gcd(3,5)=1颗

    Antisimon拿gcd(5,4)=1颗

    Simon拿gcd(3,3)=3颗

    Antisimon输了

    感谢@引领天下 提供的翻译

    输入输出样例

    输入样例#1: 

    3 5 9
    

    输出样例#1: 

    0

    输入样例#2: 

    1 1 100
    

    输出样例#2: 

    1

    题目地址: https://www.luogu.org/problemnew/show/CF119A


     个人思路:

    • 这道题是一道gcd的模板题
    • 首先,写一下gcd的方法
    • 然后,写一下输入输出和相关逻辑判断即可

    #include<cstdio>
    #include<iostream>
    using namespace std;
    int gcd(int a,int b){
        if(a<b)swap(a,b);
        if(b==0)return a;
        return gcd(b,a%b);
    }
    int main(){
        int a,b,n;
        cin>>a>>b>>n;
        bool nowPerson=false;
        //true:最后成功拿石子的是Simon 
        //false:最后成功拿石子的是Antisimon 
        while(n){
            if(!nowPerson){//如果该Simon拿了 
                if(gcd(n,a)>n){
                    break;//无法拿石子 
                }
                n-=gcd(n,a);
                nowPerson=true;
            }else{//如果该Antisimon拿了 
                if(gcd(n,b)>n){
                    break;//无法拿石子 
                }
                n-=gcd(n,b);
                nowPerson=false;
            }
        }
        if(nowPerson){
            cout<<0<<endl;
        }else{
            cout<<1<<endl;
        }
        return 0;
    }
  • 相关阅读:
    android 如何在手机上 安装两个同样的app
    Ubuntu 16.04 安装Gitlab
    VScode开发C++常用插件
    过滤text字段为空的数据
    ES标签搜索并解决评分排序问题
    3
    2
    1
    9
    Maven3种打包方式
  • 原文地址:https://www.cnblogs.com/zbsy-wwx/p/11680690.html
Copyright © 2011-2022 走看看