题目详情
多组数据,每组数据占一行是两个空格分隔的正整数(在32位整书范围内)
输出格式:
每组数据一行,输出是第一个人赢,还是第二个人赢。
两个人玩一个数字游戏,给定两个正整数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(); } }