百钱百鸡问题
我国古代数学家张丘建在《算经》中提出了著名的“百钱百鸡问题”:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?”意思是说:一只公鸡卖5枚钱,一只母鸡卖3枚钱,三只小鸡卖1枚钱,用100枚钱买100只鸡,能买到公鸡、母鸡、小鸡各多少只?
分析:
① 这是一个不定方程问题。有3个未知数,2个方程:设公鸡、母鸡、小鸡数分别为i、j、k,则有i+j+k=100,i*5+j*3+k/3=100。需要让计算机去一一测试是否符合条件,找出所有可能的答案。由于价格的限制,如果只是一种鸡,则公鸡最多为19只(由于共100只鸡的限制,不能等于20只),母鸡最多33只,小鸡最多99只。
② 这里用到的是穷举算法。穷举算法的基本思想是:对问题的所有可能答案一一测试,直到找到正确答案或测试完全部可能的答案。
程序如下:
main( )
{
int i,j,k;
for(i=1;i<=19;i++)
for(j=1;j<=33;j++)
for(k=3;k<=99;k=k+3)
{ if((i+j+k==100)&&(i*5+j*3+k/3==100))
printf("i=%d,j=%d,k=%d\n",i,j,k);
}
}
运行结果为:
i=4,j=18,k=78
i=8,j=11,k=81
i=12,j=4,k=84
请思考:还有没有别的编程方法?
分析:
① 这是一个不定方程问题。有3个未知数,2个方程:设公鸡、母鸡、小鸡数分别为i、j、k,则有i+j+k=100,i*5+j*3+k/3=100。需要让计算机去一一测试是否符合条件,找出所有可能的答案。由于价格的限制,如果只是一种鸡,则公鸡最多为19只(由于共100只鸡的限制,不能等于20只),母鸡最多33只,小鸡最多99只。
② 这里用到的是穷举算法。穷举算法的基本思想是:对问题的所有可能答案一一测试,直到找到正确答案或测试完全部可能的答案。
程序如下:
main( )
{
int i,j,k;
for(i=1;i<=19;i++)
for(j=1;j<=33;j++)
for(k=3;k<=99;k=k+3)
{ if((i+j+k==100)&&(i*5+j*3+k/3==100))
printf("i=%d,j=%d,k=%d\n",i,j,k);
}
}
运行结果为:
i=4,j=18,k=78
i=8,j=11,k=81
i=12,j=4,k=84
请思考:还有没有别的编程方法?