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

HDU5973(威佐夫博弈+Java大数)

2017-05-03 13:06 197 查看
今天做题长知识了,除了巴什博奕,尼姆博奕,竟然还有威佐夫博弈

威佐夫博弈定义:

有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者胜利。

直接说结论了,若两堆物品的初始值为(x,y),且x

import java.math.BigDecimal;
import java.util.Scanner;
public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub

BigDecimal one=new BigDecimal(1);
BigDecimal two=new BigDecimal(2);
BigDecimal three=new BigDecimal(3);
BigDecimal five=new BigDecimal(5);
BigDecimal l=one;
BigDecimal r=three;
for(int i=0;i<500;i++)//手动求高精度根号五
{
BigDecimal mid=l.add(r).divide(two);
if(mid.multiply(mid).compareTo(five)<0)
{
l=mid;
}
else {
r=mid;
}
}

BigDecimal gold=l.add(BigDecimal.ONE).divide(two);

BigDecimal a,b;
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
a=cin.nextBigDecimal();
b=cin.nextBigDecimal();
if(b.compareTo(a)<0)
{
BigDecimal temp=a;
a=b;
b=temp;
}
a=a.setScale(0,BigDecimal.ROUND_DOWN);
b=b.subtract(a).multiply(gold);
b=b.setScale(0,BigDecimal.ROUND_DOWN);
if(b.compareTo(a)==0)
{
System.out.println("0");
}
else
{
System.out.println("1");
}
}

cin.close();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java HDU 博弈论