`
Wesleydeng
  • 浏览: 33687 次
  • 性别: 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
分享到:
评论

相关推荐

    海盗分金源代码

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

    经典海盗分金C++源码

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

    海盗分金 python 源码

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

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

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

    海盗分宝石

    海盗分宝石的求解程序,C#语言开发,需要 Dot Net 2.0 环境支持

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

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

    海盗分金问题C语言解答

    海盗分金问题 C语言实现,支持N个海盗M个黄金 的分配,结果写在文件中

    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游戏耳机在音质表现的相当优异,尤其是游戏声音中一些重...

    海盗分宝石C#源码

    海盗分宝石的逻辑模型,C#2.0编写,每条语句都附有通俗易懂的注释,可供学习研究使用。  压缩包内另一目录是编译后生成的安装程序。

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

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

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

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

    asdf.rar_海盗分金

    著名的海盗分金的源代码,也是ACM训练过程中必做的一道题

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

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

    corsair.rar_corsair_海盗分金

    关于海盗分金的一个问题--和最小且相等问题

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

    逻辑推理题 海盗分钻石 详细解答,绝对正确,给你启发

    博弈-海盗分金模型.pdf

    博弈-海盗分金模型.pdf

    海盗派测试分析.pdf

    海盗派测试分析.pdf

    学习要像加勒比海盗.zip

    《学习要像加勒比海盗:自我教育如何引领你走向成功》作者詹姆斯·巴哈(经典畅销书《海鸥乔纳森》作者理查德·巴哈的儿子)就是其中的代表人物之一。和许多年轻人一样,詹姆斯厌倦了正统的学校教育,没有读完高中就...

    海盗数据库

    海盗王数据库,海盗王数据库,海盗王数据库,

Global site tag (gtag.js) - Google Analytics