誰先把其中一個數減爲0的獲勝。問誰可以贏。Stan是先手。
思路:假設a>=b, 如果a%b == 0, 那麼肯定是先手勝。(點擊打開鏈接)如果a>=2*b. 那麼 那個人肯定知道a%b,b是必勝態還是必敗
態。如果是必敗態,先手將a,b變成a%b,b,那麼先手肯定贏。如果是必勝態,先手將a,b變成a%b+b,b.那麼對手只有將這兩個數變成
a%b,b,先手獲勝。如果是b<a<2*b 那麼只有一條路:變成a-b,b (這個時候0<a-b<b).這樣一直下去看誰先面對上面的必勝狀態。所
以假如面對b < a <2*b的狀態,就先一步一步走下去。直到面對一個a%b==0 || a >=2*b的狀態。
代碼:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a, b;
while (sc.hasNext()) {
a = sc.nextInt();
b = sc.nextInt();
if (a == 0 && b == 0)
break;
if (a < b) {
int t = a;
a = b;
b = t;
}
int win = 0;
while (b != 0) {
if (a == b || a >= 2 * b)
break;
a -= b;
int t = a;
a = b;
b = t;
win ^= 1;
}
System.out.println(win == 0 ? "Stan wins" : "Ollie wins");
}
}
}