洛谷——P1290 歐幾裏德的遊戲
阿新 • • 發佈:2017-09-11
name 整型 star print char win 數字 getchar 輸出格式
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:2 25 7 24 15輸出樣例#1:
Stan wins Ollie wins
1、設m,n為輸入數據且m>n,第一個滿足條件m-n>n的步驟所對應的人為勝利者
2、m%n==0時的步驟所對應的人為勝利者。
#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> 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; }
洛谷——P1290 歐幾裏德的遊戲