SWUST OJ 5 欧几里得游戏

从板上两个不相等的正数(M,N和M>N)开始。两名球员依次移动。在每一个动作中,玩家都必须在棋盘上写一个正数,等于棋盘上已有的两个数字的差;这个数字必须是新的,即不同于板上已有的所有数字。不能移动的玩家会输掉比赛。在这场比赛中,你应该选择第一还是第二?
根据以上规则,有两名玩家玩这个游戏。假设A先在黑板上写一个数字,然后B再写。
你的任务是编写一个程序来判断获胜者是A还是B。

输入

两个不相等的正数M和N,M>N(M<100000)

输出

A或B

举个例子

  1. 举个例子a=7,b=4 ,两个都不是偶数
    需要写的数就是(7-2)=5,1 2 3 5 6
  2. 假设a=14,b=8,gcd(14,8)=2,最大公约数
    14/gcd(14,8)-2=14/2-2=5
    那么场上可以有的数就是2 4 6 10 12 。

a,b都是偶数就要除最大公约数

#include<bits/stdc++.h>
using namespace std;

int gcb(int a,int b)//求最大公约数
{
    while(b)
    {
        int r;
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}

int main()
{
    int a,b,s;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
        if(a%2==0&&b%2==0)//都为偶数
            s=(a/gcb(a,b)-2)%2;//a除最大公约数
        else
            s=(a-2)%2;//0到a之间空缺的数,然后看他是奇数还是偶数
        if(s)
            printf("A\n");
        else
            printf("B\n");
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值