C语言

中国古代数学家张丘建在他的<<算经>>中提出了一个著名的”百钱白鸡问题”: 一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡,母鸡,小鸡各多少只?


代码:

#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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值