HDU 1525 Euclid's Game(博弈)

題意:題目給出了兩個正數a, b,每次操作可以把大的數減掉小的數的整數倍。一個數變爲0 的時候結束。


誰先把其中一個數減爲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");
		}
	}
}


發佈了497 篇原創文章 · 獲贊 623 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章