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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值