设x、y、z分别代表公鸡、母鸡、小鸡数量。则x不会超过20,y不会超过33,z不会超过100。
有如下两方程成立:
x+y+z=100
5x+3y+z/3=100
联立两方程删除z得:7x+4y=100
用pascal编的程序如下:
var
x,y,z:byte;
begin
for x:=1 to 20 do for y:=1 to 33 do
if (7x+4y=100)and(100-x-y>=0) then begin
z:=100-x-y;
writeln(x:4,y:4,z:4);
end;
readln;
end
#include<stdioh>
#define N 100
int main()
{
int i,j,k,t=0;
for(i=1;i5<=N;i++)
for(j=1;j3<=N;j++)
for(k=1;k3<=N;k++)
if(5i+j3+k3==N)
{printf("i=%3d,j=%3d,k=%3d\n",i,j,k);<br/>t++;}
printf("共有%d种不同法\n",t);
return 0;
}
百钱买百鸡问题——一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少)。
这是一个古典数学问题,设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为三元一次方程组:
这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z的取值范围:
1) x的取值范围为1~20
2) y的取值范围为1~33
3) z的取值范围为3~99,步长为3
对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解。
数据要求
问题中的常量:
无
问题的输入:
无
问题的输出:
int x,y,z /公鸡、母鸡、小鸡的只数/
初始算法
1.初始化为1;
2.计算x循环,找到公鸡的只数;
3.计算y循环,找到母鸡的只数;
4.计算z循环,找到小鸡的只数;
5.结束,程序输出结果后退出。
算法细化
算法的步骤1实际上是分散在程序之中的,由于用的是for循环,很方便的初始条件放到了表达式之中了。
步骤2和3是按照步长1去寻找公鸡和母鸡的个数。
步骤4的细化
4.1 z=1
4.2 是否满足百钱,百鸡
4.2.1 满足,输出最终百钱买到的百鸡的结果
4.2.2 不满足,不做处理
4.3 变量增加,这里注意步长为3
流程图
图5-8 程序执行流程图
程序代码如下
#include "stdioh"
main()
{
int x,y,z;
for(x=1;x<=20;x++)
for(y=1;y<=33;y++)
for(z=3;z<=99;z+=3)
{
if((5x+3y+z/3==100)&&(x+y+z==100))/是否满足百钱和百鸡的条件/ printf("cock=%d,hen=%d,chicken=%d\n",x,y,z);
}
}
分析
程序运行结果如下:
cock=4,hen=8,chicken=78
cock=8,hen=11,chicken=81
cock=12,hen=4,chicken=84
对于这个问题实际上可以不用三重循环,而是用二重循环,因为公鸡和母鸡数确定后,小鸡数就定了,即 。请同学们自己分析二重循环和三重循环的运行次数,做为练习自己调试这一方法。
参考资料:
百钱其实可以招鸡,不一定要买鸡。
看你是真心需要答案我就写一个,不过我习惯用C#,语法相近,无非就是一个一元一次方程多个解,公鸡母鸡都是5元一只,你就假设公鸡加母鸡X只,小鸡Y只。方程就是:
5x+y/3=100
百钱买百鸡意思就是保证XY都是整数就好了,对编程来讲就是一个从1到100遍历X,判断Y是不是真的是整数的过程。可能数学老师神话了这一个方程,但是编程思想就是这么一个简单的原理:
private void button1_Click(object sender, EventArgs e){
//5x+y/3=100;
int count = 0;
string y = "";
string result="";
Regex reg = new Regex(@"^((\d|[123456789]\d)|100)$");
for (int x=1;x<100;x++)
{
y = ((100 - 5 x) 3)ToString();
if (regIsMatch(y)&&(x+ConvertToInt32(y))==100)
{
count++;
result += "解" + countToString() + ": x" + countToString() + "=" + xToString() + " y" + countToString() + " = " + yToString() + "\r\n";
}
}
result = (result == "") "无解" : result;
MessageBoxShow(result);
}
结果你看一下,价格肯定是你乱给的,无解:
公鸡母鸡都改成3块之后
他就有解了,而且,我记得好像公鸡母鸡价格不一样
以上就是关于百元买百鸡问题,编程急求全部的内容,包括:百元买百鸡问题,编程急求、C语言程序百钱买百鸡,公鸡5块钱一只,母鸡三块.小鸡一块3只,程序怎么写啊~、典型问题:百钱买百鸡的算法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)