中国古代数学家张丘建在他的<<算经>>中提出了一个著名的”百钱白鸡问题”: 一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡,母鸡,小鸡各多少只?
代码:
#include <stdio.h>
int main( )
{
for(cock = 0;cock <= 20;cock++) //公鸡用100钱最多能买20只
for(hen = 0;hen <= 33;hen++) //母鸡用100钱最多能买33只
for(chicken = 0;chicken <= 100;chicken++) //小鸡最多买100只
{
if((cock + hen + chicken == 100) && (5 * cock + 3 * hen + chicken / 3.0 == 100))
printf(“cock=%d,hen=%d,chicken=%d\n”,cock,hen,chicken);
}
return 0;
}
以上算法要穷举尝试21x34x101=72114次,算法效率偏低,对于不定方程的问题,各层循环的控制变量直接与方程的未知数相关.对于本题来说,公鸡cock的数量确定后,小鸡的数量就固定为100 - cock - hen,不需要穷举了,此时的约束条件只有一个: 5xcock + 3xhen + chicken/3 = 100,这样就可以使用两重嵌套就可以完成:
代码 :
#include <stdio.h>
int main( )
{
int cock,hen,chicken;
for(cock = 0;cock <= 20;cock++)
for(hen = 0;hen <= 33;hen)
{
chicken = 100 - cock - hen;
if(5 * cock + 3 * hen + chicken / 3 == 100)
printf(“cock=%d,hen=%d,chicken=%d\n”,cock,hen,chicken);
}
return 0;
}