计蒜客练习题:取石子游戏

计蒜客练习题:取石子游戏

1454456-20181119204340746-143937148.png

解题思路:设 d=gcd(a,b),那么 a,b 都是 d 的倍数,a+b和a-b也一定是 d 的倍数。然后看 1~n 范围内有多少个数是 d 的倍数,奇数个就是先手赢,偶数个就是后手赢。

AC代码:
#include <iostream>
#include <cstdio>
using namespace std;
long long int gcd(long long int a,long long int b) {
  if (b == 0) {
    return a;
  }
  return gcd(b, a % b);
}
int main() {
  int t;
  cin >> t;
  while (t--) {
    long long int n,a, b;
    cin>>n>>a>>b;      
    int ans=n/gcd(a,b)%2;
     if(ans==1)
    cout << "huaye" << "\n";
      else 
    cout<<"suantou" << "\n";
  }
  return 0;
}

————————————————————————————————————————
问题描述:

蒜头君和花椰妹在玩一个游戏,他们在地上将 n 颗石子排成一排,编号为 1 到 n。开始时,蒜头君随机取出了 2 颗石子扔掉,假设蒜头君取出的 2 颗石子的编号为 a, b。游戏规则如下,蒜头君和花椰妹 2 人轮流取石子,每次取石子,假设某人取出的石子编号为 i,那么必须要找到一对 j, k 满足 i=j−k 或者 i=j+k ,并且编号为 j,k 的石子已经被取出了,如果谁先不能取石子了,则视为输了。蒜头君比较绅士,让花椰妹先手。

转载于:https://www.cnblogs.com/fisherss/p/9985591.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值