`
Wesleydeng
  • 浏览: 34694 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

“海盗分金币”的程序解法

    博客分类:
  • java
阅读更多

今天同学跟我讲海盗分金币这道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,
0
1
分享到:
评论

相关推荐

    经典海盗分金C++源码

    经济学上有个“海盗分金”模型,是说5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。“海盗分金”其实是...

    海盗分金 python 源码

    #经济学上有个“海盗分金”模型:是说5个海盗抢得100枚金币,他们按抽签的顺序依次提方案:首先由1号提出分配方案,然后5人表决,投票要超过半数同意方案才被通过,否则他将被扔入大海喂鲨鱼,依此类推。 #假定“每...

    海盗分金源代码

    2. 改变一下规则,投票中方案必须得到超过50%的票数(只得到50%票数的方案的提出者也会被丢到海里去喂鱼),那么如何解决5个海盗分100枚金币的问题? 3. 不改变规则,如果让100个海盗分100枚金币,会发生什么? 4. ...

    海盗分金问题C语言解答

    【海盗分金问题】是一个经典的逻辑与算法问题,源自计算机科学中的博弈论。在这个问题中,一群海盗在海上找到了一定数量的黄金,并需要按照特定的规则来分配这些黄金。问题的关键在于,这群海盗遵循两个原则:一是每...

    海盗分宝石

    《海盗分宝石》是一款基于C#语言开发的程序,它为用户提供了一种模拟解决海盗分宝石问题的平台。这个问题源自著名的逻辑与算法题目,通常在计算机科学和编程教育中被用作教学案例。在此程序中,我们可以看到C#语言的...

    asdf.rar_海盗分金

    【描述】:描述中提到的“著名的海盗分金的源代码”指的是解决一个逻辑和策略性问题的程序代码。在这个问题中,一群海盗在获得一批黄金后,需要按照一定的规则来分配这些黄金,规则通常包含两个主要条件:生存和最大...

    面向对象编程解决海盗分金问题

    昨天整理移动硬盘,竟然翻出了五年前的小程序源码。记得当时是在中国人民大学边上的一个小公园里花了一个... 这里所说的复杂问题是指一个很古老的问题——海盗分金问题…… 详细内容请参考压缩包中《重要说明.doc》

    海盗分宝石C#源码

    而“海盗分宝石”作为标签,表明这是一个与算法和逻辑推理相关的程序设计问题,可能涉及到贪心算法、回溯法或动态规划等策略。 【压缩包子文件的文件名称列表】:“PirateStory”可能是项目的主要源代码文件或解决...

    博弈-海盗分金模型借鉴.pdf

    博弈-海盗分金模型借鉴.pdf

    Corsair海盗船RaptorH3游戏耳机驱动程序ForWinXPVistaWin7Win8

    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_海盗分金

    标题中的“corsair.rar_corsair_海盗分金”似乎是指一个编程挑战或者算法问题,其核心是基于“海盗分金”(Pirate Gold)的经典逻辑难题。这个问题源自著名的计算机科学书籍《编程珠玑》(Programming Pearls),并...

    C#实现的海盗分金算法实例

    在C#中实现海盗分金算法,我们可以创建一个程序来模拟这个过程。首先,我们需要定义海盗的数量和总的金币数。然后,通过循环从最后的海盗开始向前推理,模拟每个海盗的决策过程。在每次迭代中,我们需要考虑当前海盗...

    PirateMap, 程序生成海盗宝藏地图.zip

    PirateMap, 程序生成海盗宝藏地图 海盗地图程序生成的海盗宝藏地图。 X 标出地点 ! 依赖项我使用了几个优秀的第三方图书馆。用于渲染的cairo用于颜色插值的colour用于单工噪声的noise用于保存噪声层的调试图像的...

    逻辑推理题 海盗分钻石 详细解答

    这个问题是一个经典的逻辑推理问题,通常被称为“海盗分宝石”或者“海盗分钻石”问题,源自博弈论中的纳什均衡概念。在这个问题中,我们需要考虑每个海盗的理性思考和自我保存的本能,以及他们对钻石的贪婪。我们...

    Delphi:海盗远控源码.zip源码Delphi项目程序源码下载

    Delphi:海盗远控源码.zip源码Delphi项目程序源码下载Delphi:海盗远控源码.zip源码Delphi项目程序源码下载 1.合个人学习技术做项目参考 2.适合学生做毕业设计参考 3.上线产品适合小公司开发项目参考

    海盗船k70 rgb键盘驱动程序 v1.2.77 官方最新版

    海盗船k70rgb驱动是一款专为海盗船corsairk70rgb键盘打造的驱动程序,这款键盘外形霸气、做工精致,操作手感舒适,漂亮又好用,如果你想对键盘进行更多功能设置,欢迎在下载该驱动!驱动介绍此款驱动是海盗船k70rgb...

    海盗船h115i水冷驱动程序v2017官方版

    海盗船h115i水冷驱动是一款专为贼船水冷散热器h115i型号专用驱动程序,海盗船h115i驱动完整安装后可数据化的显示、管理散热器各项信息方便用户管理,需要此款工具的朋友们欢迎前来下载使用。 软件说明    海盗...

    QQ酷音乐程序(含音乐海盗 v1.5 采集)

    这个程序包含了“音乐海盗 v1.5 采集”模块,这可能意味着它具备了某种音乐资源的抓取或者下载功能,使得用户能够方便地获取到网络上的音乐资源。在描述中提到了用户名和密码,这暗示该程序可能需要用户注册并登录...

    海盗船strafe惩戒者键盘驱动 v1.2.74.0 官方版

    海盗船strafe驱动是该款键盘的驱动程序软件,用户可以通过它个性化自定义键盘按键以及背景灯光,多种背光颜色供你挑选,造型炫酷华丽,实用手感极佳,适合大部分游戏玩家的设计,带给你极致操作体验,有需要的朋友...

Global site tag (gtag.js) - Google Analytics