编程挑战高校俱乐部数字游戏答案

来源:互联网 发布:主人网络跟访客网络 编辑:程序博客网 时间:2024/05/16 19:29
题目详情

两个人玩一个数字游戏,给定两个正整数A,B,两个人轮流从一个数中减去另外一个数的正数倍,要保证结果非负,首先得到0的人获胜。例如:30 8经过一步操作可以变为22 8 或者14 8 或者 6 8。两个人都足够聪明。


输入格式:
多组数据,每组数据占一行是两个空格分隔的正整数(在32位整书范围内)
输出格式:
每组数据一行,输出是第一个人赢,还是第二个人赢。

答题说明
输入样例
3 5
4 5
输出样例:

1

2

代码如下

import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Mathematics {        public static void main(String[] args) {        Scanner cin = new Scanner(System.in);                int min = 0;//较小数        int max = 0;//较大数        while (cin.hasNext()) {            min = cin.nextInt();            max = cin.nextInt();            if (min > max) {                int temp = min;                min = max;                max = temp;            }                        if (max % min == 0) {                System.out.println(1);//第一个人赢                continue;            }                        List<Integer> queue = new ArrayList<Integer>();            while (true) {                int shang = max / min;                int mod = max % min;                if (mod == 0)                    break;                queue.add(shang);                                if (min > mod) {                    int temp = min;                    min = mod;                    mod = temp;                }                max = mod;            }                        int size = queue.size();            if (size == 1) {                if (queue.get(0) == 1) {                    System.out.println(2);//第二个人赢                }                else {                    System.out.println(1);//第一个人赢                }                continue;            }                        int win = -1;            for (int i = size - 1; i >= 0; i--) {                if (i == size - 1) {                    if (queue.get(i) == 1) {                        win = 1;                    }                    else {                        win = 2;                    }                }                else if (i == 0) {                    if (win == 2 && queue.get(0) > 1) {                        win = 1;                    }                }                else {                    if (queue.get(i) == 1) {                        win = win == 1 ? 2 : 1;                    }                    else {                        win = 2;                    }                }            }            System.out.println(win);        }        cin.close();    }    }

1 1