Ⅰ 百元买百鸡问题,编程急求
设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 (7*x+4*y=100)and(100-x-y>=0) then begin
z:=100-x-y;
writeln(x:4,y:4,z:4);
end;
readln;
end.
Ⅱ 百钱买百鸡用方程式是如何解的,请写出完整的解决方法,谢谢了。
百钱百鸡问题
中国古代数学家张丘建在他的《算经》中提出了着名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
*题目分析与算法设计
设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:
5x+3y+z/3=100
x+y+z=100
所以此问题可归结为求这个不定方程的整数解。
由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。
*程序说明与注释
#include<stdio.h>
void main()
{
int x,y,z,j=0;
printf("Folleing are possible plans to buy 100 fowls with 100 Yuan.\n");
for(x=0;x<=20;x++) /*外层循环控制鸡翁数*/
for(y=0;y<=33;y++) /*内层循环控制鸡母数y在0~33变化*/
{
z=100-x-y; /*内外层循环控制下,鸡雏数z的值受x,y的值的制约*/
if(z%3==0&&5*x+3*y+z/3==100)
/*验证取z值的合理性及得到一组解的合理性*/
printf("%2d:cock=%2d hen=%2d chicken=%2d\n",++j,x,y,z);
}
}
*运行结果
Follwing are possible plans to buy 100 fowls with 100 Yuan.
1:cock=0 hen=25 chicken=75
2:cock=4 hen=18 chicken=78
3:cock=8 hen=11 chicken=81
4:cock=12 hen=4 chicken=84
*总是的进一步讨论
这类求解不定方程总理的实现,各层循环的控制变量直接与方程未知数有关,且采用对未知数的取值范上穷举和组合的方法来复盖可能得到的全部各组解。能否根据题意更合理的设置循环控制条件来减少这种穷举和组合的次数,提高程序的执行效率,请读者考虑
Ⅲ C语言编程“百钱买百鸡”问题将数字写成整数和写成后面加“.0”怎么导致不同结果
c/3的值是一个整形,无论c 取什么值。比如c=1,则c/3=0;若c=5,则c/3=1; 1.0*c/3的值是一个浮点型的,也就是小数,比如c=3,则c/3=1.00,若c=4;则c/3=1.333。 所以在解这道题的时候,用c/3是怎么好的,应该用1.0*c/3
Ⅳ c语言的百钱买百鸡问题。
我国古代数学家张丘建在《算经》一书中曾提出过着名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?
题目分析
如果用数学的方法解决百钱买百鸡问题,可将该问题抽象成方程式组。设公鸡x只,母鸡y只,小鸡z只,得到以下方程式组:
A:5x+3y+1/3z = 100
B:x+y+z = 100
C:0 <= x <= 100
D:0 <= y <= 100
E:0 <= z <= 100
如果用解方程的方式解这道题需要进行多次猜解,计算机的一个优势就是计算速度特别暴力并且无怨无悔,所以我们可以欺负她、蹂躏她!因此我们用穷举法的方式来解题,需要101^3次猜解,但对于计算机来说,小CASE!
代码清单:
#include <stdio.h>int main()
{ int i, j, k;
printf("百元买百鸡的问题所有可能的解如下:\n");
for( i=0; i <= 100; i++ )
for( j=0; j <= 100; j++ )
for( k=0; k <= 100; k++ )
{
if( 5*i+3*j+k/3==100 && k%3==0 && i+j+k==100 )
{
printf("公鸡 %2d 只,母鸡 %2d 只,小鸡 %2d 只\n", i, j, k);
}
}
return 0;
}
运行结果:百元买百鸡的问题所有可能的解如下:
公鸡 0 只,母鸡 25 只,小鸡 75 只
公鸡 4 只,母鸡 18 只,小鸡 78 只
公鸡 8 只,母鸡 11 只,小鸡 81 只
公鸡 12 只,母鸡 4 只,小鸡 84 只
Ⅳ 求解数学题“百鸡问题”
此题就是“百钱买百鸡问题”。一般都是用不定方程求解,小学生,甚至初中生都很难弄懂,本文采用“分组”法求解,小学生是可以看懂的。
分析与解 因为100文钱,买100只鸡,所以平均1文钱买1只鸡。每小组4只鸡:其中1只母鸡和3只小鸡,共值4文钱。(因为1只母鸡3文钱,3只小鸡1文钱),恰好是平均1文钱买1只鸡。
每大组7只鸡:其中1只公鸡和6只小鸡。共值7文钱。(因为1只公鸡5文钱,3只小鸡1文钱,6只小鸡2文钱),恰好是平均1文钱买1只鸡。
无论100只鸡共可分成多少个大组和多少个小组,都是平均每1文钱买1只鸡。100只鸡共可分成多少个大组和多少个小组呢?
通过分析试探可发现有以下几种情况。
①分成4个大组,18个小组。
4个大组中公鸡有:1×4=4(只)
4个大组中小鸡有:6×4=24(只)
18个小组中母鸡有:1×18=18(只)
18个小组中小鸡有:3×18=54(只)
这种情况共有公鸡4只,母鸡18只,小鸡(24+54=)78(只)。
②分成8个大组,11个小组。
8个大组中公鸡有:1×8=8(只)
8个大组中小鸡有:6×8=48(只)
11个小组中母鸡有:1×11=11(只)
11个小组中小鸡有:3×11=33(只)
这种情况共有公鸡8只,母鸡11只,小鸡(48+33=)81(只)。
③分成12个大组,4个小组。
12个大组中公鸡有:1×12=12(只)
12个大组中小鸡有:6×12=72(只)
4个小组中母鸡有:1×4=4(只)
4个小组中小鸡有:3×4=12(只)
这种情况共有公鸡12只,母鸡4只,小鸡(72+12=)84(只)。所以本题共有三种可能性:公鸡买4只,母鸡买18只,小鸡买78只;或公鸡买8只,母鸡买11只,小鸡买81只;或公鸡买12只,母鸡买4只,小鸡买84只。
绝对正确如果想要其他的方法解狂M
Ⅵ C语言(百钱买百鸡的问题)
百钱百鸡问题中国古代数学家张丘建在他的《算经》中提出了着名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
*题目分析与算法设计设鸡翁、鸡母、鸡雏的个数分别为cocks(x),hens(y),chicks(z),题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然cocks的值在0~20之间;
同理,hens的取值范围在0~33之间,可得到下面的不定方程: 5x+3y+z/3=100 x+y+z=100 所以此问题可归结为求这个不定方程的整数解。由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。
程序解释
main()
{
int cocks=0,hens,chicks;
while (cocks<=19) //公鸡只数小于19
{hens=0;
while(hens<=33) //母鸡小于33只
{chicks=100-cocks-hens;
if (5.0*cocks+3.0*hens+chicks/3.0==100.0)
printf("%d %d %d\n",cocks,hens,chicks);
hens++;
}
cocks++;
}
}
*总是的进一步讨论这类求解不定方程总理的实现,各层循环的控制变量直接与方程未知数有关,且采用对未知数的取值范上穷举和组合的方法来复盖可能得到的全部各组解。能否根据题意更合理的设置循环控制条件来减少这种穷举和组合的次数,提高程序的执行效率,请读者考虑
Ⅶ 如何用C++编写百钱百鸡问题
1、百钱买百鸡问题——一百个铜钱买了一百只鸡,其中公鸡一只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的所有可能组合,最后得到问题的解。
初始算法
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
2、程序代码如下
#include"stdio.h"
main()
{
intx,y,z;
for(x=1;x<=20;x++)
for(y=1;y<=33;y++)
for(z=3;z<=99;z+=3)
{
if((5*x+3*y+z/3==100)&&(x+y+z==100))/*是否满足百钱和百鸡的条件*/printf("cock=%d,hen=%d,chicken=%d ",x,y,z);
}
}
程序运行结果如下:
cock=4,hen=8,chicken=78
cock=8,hen=11,chicken=81
cock=12,hen=4,chicken=84
Ⅷ 用三元一次方程怎么解百钱百鸡这倒数学题
100元买100只鸡,所以平均每只一元。这样每1只公鸡和6只小鸡构成一种组合(甲组合),实现7只鸡7元;每1只母鸡和3只小鸡构成另一种组合(乙组合),实现4只鸡4元。然后用100除以7,当商分别为4、8和12时,对应的余数分别为72、44和16。这些余数都是4的18倍、11倍和4倍。所以4个甲组合和18个乙组合可以满足题意,同理8个甲组合和11个乙组、12个甲组合和4个乙组合也满足题意。这样就可以分别得出4只公鸡、18只母鸡和78只小鸡是一种答案;8只公鸡、11只母鸡和81只小鸡是一种答案;12只公鸡、4只母鸡和84只小鸡是一种答案。又因为100可以被4整除。所以完全可以由乙组合单独来满足题意。既25个乙组合,也就是25只母鸡和75只小鸡也为一种答案(当要求必须买公鸡时,该结果舍去)。
设公鸡=x只 母鸡=y 小鸡=z
x+y+z=100
5x+3y+1/3z=100
可整理出6x+3y=z代入上式中
x=(100-4y)/7 且必有5x<100 3y<100 z<300
所以y>70
有上述条件,用试数法,推算出满足x、y、z均为整数的数值即为答案了。
(1)公鸡4只,母鸡18只,小鸡78只;
(2)公鸡8只,母鸡11只,小鸡81只;
(3)公鸡12只,母鸡4只,小鸡84只;
(4)母鸡25只,小鸡75只(当要求必须买公鸡时舍去)。
Ⅸ 数学的,百钱百鸡问题
设公鸡X只只 母鸡y只 小鸡z只
x+y+z=100 ( 一共100只)
5x+3y+z=100 (公鸡1只值钱5,母鸡1只值钱3,小鸡3只值钱1 一共的钱)
然后解出来 就对了
Ⅹ C语言:百钱百鸡问题
#include<stdio.h>
void main(){
int cockNum; //定义公鸡的数量,也就是鸡翁的数量
int henNum; //定义母鸡的数量,也就是鸡母的数量
int chickenNum; //定义小鸡的数量,也就是雏鸡的数量
int count = 0; //定义输出结果的编号
//公鸡100文钱能买100 / 5 = 20只
for (cockNum = 0; cockNum <= 20; cockNum++) {
//母鸡100文钱 能买100 / 3 = 33只,还多1文
for (henNum = 0; henNum <= 33; henNum++) {
//三种鸡的只数总和是100只,故只要确定公鸡和母鸡的只数,就能确定小鸡的只数
chickenNum = 100 - cockNum - henNum;
//三种鸡的总价格是100文,故以此为条件分别输出所有鸡的只数
if (5 * cockNum + 3 * henNum + chickenNum / 3.0 == 100) {
count++; //输出结果的编号自增
printf("%d.公鸡的数量是:%d只,母鸡的数量是:%d只,小鸡的数量是:%d只。\n",count,cockNum,henNum,chickenNum);
}
}
}
}