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
原创粉丝点击