博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷——P1290 欧几里德的游戏
阅读量:6250 次
发布时间:2019-06-22

本文共 1327 字,大约阅读时间需要 4 分钟。

P1290 欧几里德的游戏

题目描述

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

Start:25 7

Stan:11 7

Ollie:4 7

Stan:4 3

Ollie:1 3

Stan:1 0

Stan赢得了游戏的胜利。

现在,假设他们完美地操作,谁会取得胜利呢?

输入输出格式

输入格式:

 

第一行为测试数据的组数C。下面有C行,每行为一组数据,包含两个正整数M, N。(M, N不超过长整型。)

 

输出格式:

 

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

 

输入输出样例

输入样例#1:
225 724 15
输出样例#1:
Stan winsOllie wins

1、设m,n为输入数据且m>n,第一个满足条件m-n>n的步骤所对应的人为胜利者

 2、m%n==0时的步骤所对应的人为胜利者。

#include
#include
#include
#include
#include
using namespace std;int n,x,y,ans;int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-')f=-1; ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();} return x*f;}void f(int x,int y){ while(1) { if(x>y) swap(x,y); if(y%x==0) break; if(y-x>x) break; y-=x; ans++; }}int main(){ n=read(); while(n--) { ans=0; x=read(),y=read(); f(x,y); if(ans%2==0) printf("Stan wins\n"); else printf("Ollie wins\n"); } return 0;}

 

转载于:https://www.cnblogs.com/z360/p/7505380.html

你可能感兴趣的文章
1097 Deduplication on a Linked List
查看>>
查看 NPM、Yarn 全局安装的包
查看>>
软件版本号命名规则
查看>>
vue导航栏跳转路由
查看>>
OC - 缓存 - NSCache - 介绍
查看>>
Jenkins+GitHub+fir_cli 一行命令从源码到fir im
查看>>
【转】TCP三次握手和四次挥手全过程及为什么要三次握手解答
查看>>
[系统资源攻略]IO第一篇-磁盘IO,内核IO概念
查看>>
在 CentOS 7 上设置 grub2
查看>>
[BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
查看>>
[BZOJ 2140]稳定婚姻(强连通分量)
查看>>
人工智能工程师学习路线
查看>>
I don't like to be an theorist
查看>>
「docker实战篇」python的docker- 抖音视频抓取(上)(24)
查看>>
powerdesigner 画出 C++ UML 增加const,static,virtual属性
查看>>
12月10日站立会议
查看>>
Nginx入门(2)反向代理和负载均衡
查看>>
MySQL库表状态查询
查看>>
【鲁班学院】干货分享!《面试必备之Mysql索引底层原理分析》
查看>>
快捷键
查看>>