《算经》中有这样的一个问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”意思相当于公鸡每只5元,母鸡每只3元,小鸡3只1元,用100元买100只鸡,求公鸡、母鸡、小鸡的数量。

      先以数学方法来解这道题,设未知数公鸡a只,母鸡b只,小鸡c只,列方程式。

                       a+b+c=100

                       5a+3b+c/3=100

      表面上只能列出两个方程式。三个未知数,两个方程式。单单就目前的条件解方程是无法得到结果的。此时,就要挖掘隐藏的条件来解这道题。首先,a、b、c都是整数,没有1/2,1/3等这样的鸡;其次,c必须能被3整除。a、b、c都是整数,5a+3b也是整数,c/3也要是整数,否则,上面第二个方程式就不可能成立;最后,a、b、c的约束范围。由第二方程式可得,5a>=0且5a<=100,推出a>=0且a<=20。再加上第一方程式,得出a>=0且a<20。类似可以得到b>0且b<33,c>0且c<100。

     有了这些条件之后,就可以采用穷举法来解决问题。

     百鸡问题算法:      

      public void GetChicken()
      {           
          int x = 100 / 5;
          int y = 100 / 3;
          for (int a = 0; a <= x; a++)
          {
              for (int b = 0; b <= y; b++)
              {
                  int c = 100 - a - b;
                  if((c%3==0) && (5*a+3*b+c/3==100))
                  {                        
                      Console.WriteLine("公鸡只数:{0},母鸡只数:{1},小鸡只数:{2}", a, b, c);
                      Console.WriteLine();
                   }
               }
           }        
        }

  由百鸡百钱问题,可以延伸到n元买n鸡问题,只要在上面的方法中加一个参数n,将100替换成n即可。

 posted on 2014-04-26 10:50  会飞的金鱼  阅读(376)  评论(0)    收藏  举报