您的位置:首页 > 编程语言 > Java开发

数字游戏(java)

2014-06-13 21:12 190 查看
题目描述:

两个人玩一个数字游戏,给定两个正整数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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: