`
中华好儿孙
  • 浏览: 68745 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

对百钱买百鸡问题传统解法的一点改进

阅读更多
/**
 * "百钱买百鸡"是我国古代的著名数学题,题目这样描述:
 * 3文钱可以买1只公鸡,2文钱可以买1只母鸡,1文钱可以买3只小鸡。
 * 用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只? 
 */
public class HundredChickenHundredMoney {
	public static void main(String[] args) {
		traditionalSolution();
		System.out.println("华丽丽的分割线====================");
		improvedSolution();
		System.out.println("华丽丽的分割线又出现了~~~~~~~~~~~~~~");
		moreImprovedSolution();
		System.out.println("呵呵+++++++++++++++++++++++++++++");
		moremoreImprovedSolution();
	}
	
	/**
	 * 设100文钱买到的100只鸡中,
	 * 公鸡有x只,母鸡有y只,则小鸡有100-x-y只,
	 * x,y都为非负整数,且100>=100-x-y>=0,
	 * 则有不定方程:8x+5y=200,
	 * 我在网上浏览到的方法都是用两个循环来求得x和y的所有组合,
	 * 代码如下:
	 */
	public static void traditionalSolution(){
		for(int y = 0; y <= 40; y++){
			for(int x = 0; x <= 25; x++){
				if(8*x + 5*y == 200){
					System.out.printf("公鸡有%d只,母鸡有%d只,小鸡有%d只。\n", x, y, 100-x-y);
				}
			}
		}
	}
	
	/**
	 * 对不定方程:8x+5y=200, 经过分析可以发现:
	 * 8和5是互素的,也就是说:当我们把不定方程的形式稍加变化,
	 * 变成:8x=200-5y, 因为5显然能整除等式右边, 故必能整除等式左边,
	 * 因为5显然能整除200,所以5必能整除8x,
	 * 又5与8互素,所以5必能整除x,当等式成立的时候。
	 * 则可简化原来的两层循环只一层循环,代码如下:
	 */
	public static void improvedSolution(){
		for(int x = 0; x <= 25; x++){
			if(x%5 == 0){
				System.out.printf("公鸡有%d只,母鸡有%d只,小鸡有%d只。\n", x, Math.round(40-1.6*x), Math.round(60+0.6*x));
			}
		}
	}
	
	/**
	 * 因为最终结果的100文钱对应100只鸡,
	 * 钱与鸡(不管是什么鸡)必是一一对应的关系,
	 * 可以将公鸡和小鸡、母鸡和小鸡配对,
	 * 令gx为公鸡和小鸡的对数,mx为母鸡和小鸡的对数,
	 * 则有不定方程:4gx + 5mx = 100,
	 * 则有可进一步减少循环次数,代码如下:
	 */
	public static void moreImprovedSolution(){
		for(int mx = 0; mx <= 20; mx++){
			if(mx%4 == 0){
				System.out.printf("公鸡有%d只,母鸡有%d只,小鸡有%d只。\n", Math.round(25-1.25*mx), 2*mx, Math.round(75-0.75*mx));
			}
		}
	}
	
	/**
	 * 在网上看到的解法
	 */
	public static void moremoreImprovedSolution(){
		for(int t = 0; t <= 5; t++){
			System.out.printf("公鸡有%d只,母鸡有%d只,小鸡有%d只。\n", 25-5*t, 8*t,75-3*t);
		}
	}
}


参考博客:http://27769.eduol.cn/archives/2007/281469.html
分享到:
评论
2 楼 中华好儿孙 2015-08-19  
kyzaqlx 写道
设:公鸡有x只,母鸡有y只,小鸡有z只
则:x + y + z = 100 且 3 * x + 2 * y + z / 3 = 100 且 z % 3 = 0 且 x >= 0 且 y >= 0
不妨设:z = 3 * t
则:x + y = 100 - 3 * t
    3 * x + 2 * y = 100 - t
=> x = (100 - t) - 2 * (100 - 3 * t) = 5 * t - 100
   y = 3 * (100 - 3 * t) - (100 - t) = 200 - 8 * t
=> x = 5 * t - 100 >= 0
   y = 200 - 8 * t >= 0
=> 20 <= t <= 25 且 x % 5 = 0 且 y % 8 = 0

对, 是这么个解法!
1 楼 kyzaqlx 2015-08-11  
设:公鸡有x只,母鸡有y只,小鸡有z只
则:x + y + z = 100 且 3 * x + 2 * y + z / 3 = 100 且 z % 3 = 0 且 x >= 0 且 y >= 0
不妨设:z = 3 * t
则:x + y = 100 - 3 * t
    3 * x + 2 * y = 100 - t
=> x = (100 - t) - 2 * (100 - 3 * t) = 5 * t - 100
   y = 3 * (100 - 3 * t) - (100 - t) = 200 - 8 * t
=> x = 5 * t - 100 >= 0
   y = 200 - 8 * t >= 0
=> 20 <= t <= 25 且 x % 5 = 0 且 y % 8 = 0

相关推荐

    百钱买百鸡问题

    百钱买百鸡问题解决方案 百钱买百鸡问题是一个古典数学问题,目的是要在一百个铜钱中买到一百只鸡,其中公鸡一只5钱、母鸡一只3钱、小鸡一钱3只。这个问题可以用穷举的方法来解决,即遍历所有可能的公鸡、母鸡和...

    用C#编写的百钱买百鸡问题

    "百钱买百鸡"问题就是这样一个有趣的经典例子,它源于中国古代的数学文献,具有丰富的历史背景和教育价值。在这个问题中,我们需要使用有限的资源(100枚钱)购买三种不同价格的鸡(公鸡、母鸡和小鸡)。每种鸡的...

    百钱买百鸡项目

    "百钱买百鸡"是经典的数学问题,源自中国古代,也是计算机编程中常见的逻辑与算法练习题。在Java编程学习中,这个问题常被用来教授循环、条件语句以及逻辑推理等基础概念。在这个项目中,我们需要用编程解决如何用...

    详细讲解C++实现百钱买百鸡问题

    百钱买百鸡问题是经典的组合优化问题,源自中国古代数学文献《算经》,由数学家张丘建提出。问题描述如下:假设公鸡每只价值5元,母鸡每只3元,而3只小鸡共价值1元。目标是用100元钱购买100只鸡,求解公鸡、母鸡和...

    c++ 百钱买鸡问题 百鸡问题

    百鸡问题是经典的数学问题,它涉及到了组合数学和线性方程组的解法。在C++编程中,我们可以利用循环结构和条件判断来解决这个问题。现在,让我们深入探讨一下如何使用C++来解决百鸡问题。 首先,我们需要定义三个...

    算法 百鸡问题

    "百鸡问题",也被称为"鸡兔同笼",是中国古代数学中经典的数学问题,源自《算经》等古籍。这个问题的基本形式是:一个笼子里有若干只鸡和兔,它们的头数和脚数是已知的,求解鸡和兔各有多少。在现代计算机科学中,...

    百鸡问题 算法设计与分析

    ### 百鸡问题算法设计与分析 #### 一、问题背景及定义 “百鸡问题”是一道经典的数学问题,出自中国古代数学名著《算经》,原问题表述为:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、...

    百鸡百钱.rar c++实例

    《百鸡百钱》问题源于中国古代的一道数学趣题,也被称为“鸡兔同笼”问题的变种。在这个问题中,我们不关心兔子和鸡的腿的数量,而是关注用有限的钱购买尽可能多的鸡和鸭。在C++编程语言中解决这个问题,需要运用到...

    数学问题非传统解法.ppt

    《数学问题非传统解法》是一份探讨数学问题解决新方法的PPT,主要涵盖了模糊逻辑、神经网络、遗传算法、小波变换、粗糙集理论以及分数阶微积分学等多个领域,结合MATLAB软件的应用来阐述这些理论在实际问题中的解决...

    主元素问题解法4.rar 主元素问题解法4.rar

    主元素问题解法4.rar 主元素问题解法4.rar 主元素问题解法4.rar 主元素问题解法4.rar 主元素问题解法4.rar 主元素问题解法4.rar 主元素问题解法4.rar 主元素问题解法4.rar 主元素问题解法4.rar 主元素问题解法4.rar ...

    不适定问题的解法(吉洪诺夫).pdf

    总之,不适定问题的解法不仅为数学问题的求解提供了新的途径和思路,而且对纯数学分析的发展也产生了积极的推动作用。对这类问题的深入研究和理解,对于提高科学研究和工程技术中的问题解决能力具有重要的现实意义。

    区间数多属性决策的改进理想解法

    在提出改进理想解法时,研究者卫贵武首先对属性权重未知且属性值为区间数形式的多属性决策问题进行了详细描述。然后,通过将区间数决策矩阵的信息直接应用于多目标规划的优化模型,客观地求解各属性权重。在这个过程...

    问题解法 微积分学辞典2.pdf

    问题解法 微积分学辞典

    反问题的数值解法

    反问题的数值解法.pdf图书。肖庭延、于慎根、王彦飞著,科学出版社,274页。

    高等应用数学问题的MATLAB求解 第10章 数学问题的非传统解法 共147页.pptx

    【课程大纲】 第1章 计算机数学语言描述 共33页.pptx 第2章 MATLAB语言程序设计基础 共61页.pptx 第3章 微积分问题的计算机求解 共111页.pptx 第4章 线性代数问题的计算机...第10章 数学问题的非传统解法 共147页.pptx

    二维稳态导热问题数值解法.pdf

    二维稳态导热问题数值解法.pdf

    枚举法解决百元买百鸡PPT学习教案.pptx

    例如,在【百元买百鸡问题】中,我们需要购买价值为100的钱的鸡,鸡分为三种类型:公鸡(值5钱)、母鸡(值3钱)和小鸡(3只值1钱)。通过设立三个变量`x`、`y`、`z`分别表示公鸡、母鸡和小鸡的数量,我们可以构建一...

    博弈问题的解法.rar

    在这个"博弈问题的解法"压缩包中,我们可以看到三个文件:2-zyf.doc、S_nim.txt以及cutting game.txt,它们分别可能对应不同的博弈问题及其解决方案。 首先,"2-zyf.doc"可能是关于“二人博弈”或“Zyf博弈”的文档...

    MATLAB在科学计算中的应用:第9章 数学问题的非传统解法选讲.ppt

    MATLAB在科学计算中的应用广泛,特别是在解决数学问题时,常常采用非传统的解法,如遗传算法和神经网络。本文将深入探讨这两种方法,并以MATLAB 7.0的遗传算法与直接搜索工具箱为例,阐述它们在最优化问题中的应用。...

    MATLAB与高等数学教程课件 MATLAB在科学计算中的应用 第9章 数学问题的非传统解法选讲(共39页).pptx

    第九章“数学问题的非传统解法选讲”着重探讨了两种非传统算法:遗传算法和神经网络。遗传算法是一种模拟生物进化过程的全局优化技术,由美国密歇根大学的John Holland于1975年提出。它不是基于单一解的迭代,而是...

Global site tag (gtag.js) - Google Analytics