今天同学跟我讲海盗分金币这道IQ题,突然想这应该可以用程序来解,所以就尝试了一下:
命题 写道
有5个海盗抢到100个金币,他们都很贪婪,但又很聪明理智,所以他们商量出了个方法来分配,先抽签产生12345号,然后按顺序提出一个分配方案,如果未能超过半数,他就要被扔到海里喂鲨鱼,请问该怎么分配那自己才能拿最多的金币。
import java.util.ArrayList;
import java.util.Collections;
public class PirateProblem
{
private static final int ALLCOINS = 100;
public static void main(String[] args)
{
for (int numPirate = 2; numPirate < 8; numPirate++)//输出2个到7个海盗的情况
{
System.out.print(numPirate+"个海盗时:");
int[] finalResult = solve(numPirate);
for (int each : finalResult)
{
System.out.print(each + ",");
}
System.out.println();//换行
}
}
public static int[] solve(int n)//递归解决
{
int[] result = new int[n];
if (n == 2)
{
result[0] = ALLCOINS;
result[1] = 0;
return result;
}
int[] preResult = solve(n - 1);//假设少一个人的时候的结果
ArrayList<Pirate> pirateList = new ArrayList<Pirate>();
for (int index = 0; index < preResult.length; index++)//存入list中方便排序
{
pirateList.add(new Pirate(index, preResult[index]));
}
Collections.sort(pirateList);//排序
for (int index = 0; index < preResult.length; index++)
{
Pirate temp = pirateList.get(index);
if (index < (n / 2))//争取半数人同意
{
preResult[temp.getNumber()] = preResult[temp.getNumber()] +1;
}
else//其余的人不管
{
preResult[temp.getNumber()] = 0;
}
}
int coinsGotByFirstPirate=ALLCOINS;//初始化为总硬币个数
for (int index = 0; index < preResult.length; index++)
{
result[index+1]=preResult[index];
coinsGotByFirstPirate-=preResult[index];//减去以分配出去的硬币个数
}
result[0]=coinsGotByFirstPirate;//第0个海盗的就是第一个海盗
return result;
}
}
其中有一个Pirate类:
public class Pirate implements Comparable<Pirate>
{
private Integer number;
private Integer coins;
public Pirate(int number, int coins)
{
super();
this.number = number;
this.coins = coins;
}
public Integer getCoins()
{
return coins;
}
public Integer getNumber()
{
return number;
}
@Override
public int compareTo(Pirate pirate)
{
return this.coins.compareTo(pirate.getCoins());
}
}
结果:
2个海盗时:100,0,
3个海盗时:99,0,1,
4个海盗时:97,0,1,2,
5个海盗时:97,0,1,2,0,
6个海盗时:96,0,1,2,0,1,
7个海盗时:96,0,1,2,0,1,0,
分享到:
相关推荐
经济学上有个“海盗分金”模型,是说5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。“海盗分金”其实是...
#经济学上有个“海盗分金”模型:是说5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,投票要超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。 #假定“每...
2. 改变一下规则,投票中方案必须得到超过50%的票数(只得到50%票数的方案的提出者也会被丢到海里去喂鱼),那么如何解决5个海盗分100枚金币的问题? 3. 不改变规则,如果让100个海盗分100枚金币,会发生什么? 4. ...
【海盗分金问题】是一个经典的逻辑与算法问题,源自计算机科学中的博弈论。在这个问题中,一群海盗在海上找到了一定数量的黄金,并需要按照特定的规则来分配这些黄金。问题的关键在于,这群海盗遵循两个原则:一是每...
《海盗分宝石》是一款基于C#语言开发的程序,它为用户提供了一种模拟解决海盗分宝石问题的平台。这个问题源自著名的逻辑与算法题目,通常在计算机科学和编程教育中被用作教学案例。在此程序中,我们可以看到C#语言的...
【描述】:描述中提到的“著名的海盗分金的源代码”指的是解决一个逻辑和策略性问题的程序代码。在这个问题中,一群海盗在获得一批黄金后,需要按照一定的规则来分配这些黄金,规则通常包含两个主要条件:生存和最大...
昨天整理移动硬盘,竟然翻出了五年前的小程序源码。记得当时是在中国人民大学边上的一个小公园里花了一个... 这里所说的复杂问题是指一个很古老的问题——海盗分金问题…… 详细内容请参考压缩包中《重要说明.doc》
而“海盗分宝石”作为标签,表明这是一个与算法和逻辑推理相关的程序设计问题,可能涉及到贪心算法、回溯法或动态规划等策略。 【压缩包子文件的文件名称列表】:“PirateStory”可能是项目的主要源代码文件或解决...
博弈-海盗分金模型借鉴.pdf
Corsair海盗船Raptor H3游戏耳机驱动For WinXP-32/WinXP-64/Vista-32/Vista-64/Win7-32/Win7-64/Win8-32/Win8-64(2014年1月21日发布)海盗船Raptor猛禽系列H3游戏耳机在音质表现的相当优异,尤其是游戏声音中一些重...
标题中的“corsair.rar_corsair_海盗分金”似乎是指一个编程挑战或者算法问题,其核心是基于“海盗分金”(Pirate Gold)的经典逻辑难题。这个问题源自著名的计算机科学书籍《编程珠玑》(Programming Pearls),并...
在C#中实现海盗分金算法,我们可以创建一个程序来模拟这个过程。首先,我们需要定义海盗的数量和总的金币数。然后,通过循环从最后的海盗开始向前推理,模拟每个海盗的决策过程。在每次迭代中,我们需要考虑当前海盗...
PirateMap, 程序生成海盗宝藏地图 海盗地图程序生成的海盗宝藏地图。 X 标出地点 ! 依赖项我使用了几个优秀的第三方图书馆。用于渲染的cairo用于颜色插值的colour用于单工噪声的noise用于保存噪声层的调试图像的...
这个问题是一个经典的逻辑推理问题,通常被称为“海盗分宝石”或者“海盗分钻石”问题,源自博弈论中的纳什均衡概念。在这个问题中,我们需要考虑每个海盗的理性思考和自我保存的本能,以及他们对钻石的贪婪。我们...
Delphi:海盗远控源码.zip源码Delphi项目程序源码下载Delphi:海盗远控源码.zip源码Delphi项目程序源码下载 1.合个人学习技术做项目参考 2.适合学生做毕业设计参考 3.上线产品适合小公司开发项目参考
海盗船k70rgb驱动是一款专为海盗船corsairk70rgb键盘打造的驱动程序,这款键盘外形霸气、做工精致,操作手感舒适,漂亮又好用,如果你想对键盘进行更多功能设置,欢迎在下载该驱动!驱动介绍此款驱动是海盗船k70rgb...
海盗船h115i水冷驱动是一款专为贼船水冷散热器h115i型号专用驱动程序,海盗船h115i驱动完整安装后可数据化的显示、管理散热器各项信息方便用户管理,需要此款工具的朋友们欢迎前来下载使用。 软件说明 海盗...
这个程序包含了“音乐海盗 v1.5 采集”模块,这可能意味着它具备了某种音乐资源的抓取或者下载功能,使得用户能够方便地获取到网络上的音乐资源。在描述中提到了用户名和密码,这暗示该程序可能需要用户注册并登录...
海盗船strafe驱动是该款键盘的驱动程序软件,用户可以通过它个性化自定义键盘按键以及背景灯光,多种背光颜色供你挑选,造型炫酷华丽,实用手感极佳,适合大部分游戏玩家的设计,带给你极致操作体验,有需要的朋友...