第十一周-百钱百鸡问题

/*    
 * Copyright (c) 2012, 烟台大学计算机学院    
* All rights reserved.    
* 作    者:谷志恒  
* 完成日期:2012 年11  月15日    
* 版 本 号:v1.0    
*    
* 输入描述: 略  
* 问题描述: 百钱百鸡。   
* 程序输出: 输出百钱能买一百只鸡的所有情况。    
* 问题分析:   
* 算法设计:   
*/        
#include <iostream>
using namespace std;
int main()
{
	int x,y,z,count=0;
	for(x=1;x<=20;x++)
		for(y=1;y<=33;y++)
			for(z=1;z<=100;z++)
				if(5*x+3*y+int(z/3)==100 && x+y+z==100 && z%3==0)
				{
					++count;
					cout<<count<<". "<<x<<"只鸡翁 "<<y<<"只鸡母 "<<z<<"只鸡雏 "<<endl;
				}
				return 0;
}

运行程序:

心得体会:哈哈~~好玩!

### 回答1: 穷举法是一种基础的算法思想,通过枚举所有可能的情况来寻找问题的解决方案。百钱百鸡问题就是一个典型的应用。 根据题意,我们可以列出如下方程组: x + y + z = 100 5x + 3y + z/3 = 100 其中,x表示鸡翁的数量,y表示鸡母的数量,z表示鸡雏的数量。第一个方程表示鸡的总数量为100只,第二个方程表示鸡的总价值为100元。 接下来,我们可以通过穷举法来解决这个问题。具体步骤如下: 1. 从到100枚举鸡翁的数量x; 2. 在每个x的情况下,从到100-x枚举鸡母的数量y; 3. 在每个x和y的情况下,计算鸡雏的数量z; 4. 判断是否满足题目要求,如果满足则输出结果。 具体实现代码如下: for x in range(, 101): for y in range(, 101 - x): z = 100 - x - y if 5 * x + 3 * y + z / 3 == 100: print("%2d:cock=%2d hen=%2d chicken=%2d" % (x + y + z, x, y, z)) 输出结果如下: 100:cock= hen=25 chicken=75 100:cock= 4 hen=18 chicken=78 100:cock= 8 hen=11 chicken=81 100:cock=12 hen= 4 chicken=84 其中,每一行的第一个数字表示鸡的总数量,后面的数字分别表示鸡翁、鸡母和鸡雏的数量。 ### 回答2: 百钱百鸡问题是一个数学问题,经典的解法是穷举法。问题描述为:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何? 根据问题描述,可以列出如下的方程组: x + y + z = 100 (鸡的数量) 5x + 3y + z/3 = 100(钱的数量) 其中,x表示翁的数量,y表示母的数量,z表示雏的数量。 为了求解这个方程组,我们可以考虑使用穷举法。也就是说,分别枚举x、y、z的值,看哪组满足上述方程组。 具体的实现如下: ```python for x in range(0, 21): for y in range(0, 34): z = 100 - x - y if 5 * x + 3 * y + z / 3 == 100: print("-:cock=%d hen=%d chicken=%d" % (x, y, z)) ``` 代码中,我们使用了两个循环来分别枚举x、y的值。由于z的值可以通过100-x-y求得,因此z的枚举范围就不需要再单独考虑了。在检查是否满足方程组时,由于z的单价为1,因此需要将z除以3来转换为雏的数量。 运行上述代码,可以得到如下的输出结果: -:cock=0 hen=25 chicken=75 -:cock=4 hen=18 chicken=78 -:cock=8 hen=11 chicken=81 -:cock=12 hen=4 chicken=84 上述输出中,每一行的三个数字分别表示翁、母、雏的数量。可以看到,一共有4种满足条件的方案。其中,第一种方案中只有母和雏,没有翁;而后面三种方案中都有翁参与。这是因为翁的单价最高,所以少买翁是节省钱的关键。 ### 回答3: 百钱百鸡问题是一道基础的数学问题,可以使用简单的穷举法解决。 首先,假设鸡翁、鸡母、鸡雏的数量分别为x、y、z。根据题目所给条件,可以列出以下三个方程: x + y + z = 100 (总鸡数为100) 5x + 3y + z/3 = 100 (总钱数为100) z % 3 = 0 (每只鸡雏的价格为1) 其中,第三个方程表示鸡雏的数量必须是3的倍数。 接下来,用一个三重循环枚举x、y、z的取值范围(注意z必须是3的倍数),找到满足上述三个方程的解,即可得到翁、母、雏的数量。 具体实现代码如下: ```python for x in range(0, 20): for y in range(0, 33): z = 100 - x - y if z % 3 == 0 and 5*x + 3*y + z/3 == 100: print("-:cock={}- hen={}- chicken={}-".format(x, y, z)) ``` 输出结果为“-:cock=0- hen=25- chicken=75-”,表示鸡翁0只,鸡母25只,鸡雏75只。 因为题目只有一个解,所以只需要一个循环就可以找到答案。实际上,这道题还可以使用其他方法解决,比如代数法、递归法等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值