百元买百鸡问题,编程急求

百元买百鸡问题,编程急求,第1张

设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只,程序怎么写啊~、典型问题:百钱买百鸡的算法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9849085.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存