数字游戏(java)

来源:互联网 发布:网络零售的优势和缺点 编辑:程序博客网 时间:2024/05/17 07:59

题目描述:

两个人玩一个数字游戏,给定两个正整数A,B,两个人轮流从一个数中减去另外一个数的正数倍,要保证结果非负,

首先得到0的人获胜。例如:30 8经过一步操作可以变为22 8 或者14 8 或者 6 8。两个人都足够聪明。

输入格式:

多组数据,每组数据占一行是两个空格分隔的正整数(在32位整书范围内)

输出格式:

每组数据一行,输出是第一个人赢,还是第二个人赢。



答题说明

输入样例

3 5

4 5

输出样例:

1

2

解题思路:

前提:a2>b2;

情况1:看天命也就是a2/b2恒等于1,谁最后选谁胜。

情况2:当第一次找到a2/b2>=2,此时谁选择谁胜出,即根据最优策略知第一次选择输赢已定。


import java.util.Scanner;public class DigitalGame {public static int a;public static int b;public static void main(String[] args) {Scanner in=new Scanner(System.in);while(in.hasNextInt()){a=in.nextInt();b=in.nextInt();if(a<b){a=a+b;b=a-b;a=a-b;}System.out.println(caculate(a,b));}}private static int caculate(int a2, int b2) {int res=1;int start=0;int temp=0;boolean bool=false;boolean ok=true;while(true){if(a2%b2==0)break;else{if(a2/b2>=2&&ok){start=res+1;ok=false;break;}temp=a2%b2;a2=b2;b2=temp;bool=!bool;res++;}}return ok?bool?2:1:start%2+1;}}

简化后:

import java.util.Scanner;public class DigitalGame {public static void main(String[] args) {Scanner in=new Scanner(System.in);while(in.hasNextInt()){int a=in.nextInt();int b=in.nextInt();if(a<b){a=a+b;b=a-b;a=a-b;}int temp=0;boolean bool=true;if(a!=b){while(true){if((a-b)>>1>=b)break;temp=b;b=a-b;a=temp;bool=!bool;}}System.out.println(bool?1:2);}}}

0 0
原创粉丝点击