C语言
来源:互联网 发布:noi算法优化 编辑:程序博客网 时间:2024/06/16 19:27
中国古代数学家张丘建在他的<<算经>>中提出了一个著名的”百钱白鸡问题”:一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡,母鸡,小鸡各多少只?
代码:
#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;}
0 0