VFP趣味编程:百钱买百鸡

公鸡3元一只,母鸡5元一只,小鸡1元三只。100元钱买100只鸡,请算出公鸡、母鸡、小鸡的数目。

思路分析:题目包含的条件有两个:一是共买了100支鸡,二是共花了100元钱。我们做最极端的假设,公鸡可能是0100只,母鸡可能也是0100只,小鸡也一样,将这三种情况用循环验证符合条件的情况,那就要做100*100*100种情况分析。源程序ex6_1.prg如下:

SET  TALK  OFF
FOR  x = 0   TO   100
  
FOR  Y = 0   TO   100
    
FOR  z = 0   TO   100
      
IF   3 * x + 5 * Y + z / 3 = 100   AND  x + Y + z = 100
        ? 
" 公鸡、母鸡、小鸡的数量分别是: " ,x,Y,z
      ENDIF
    ENDFOR
  ENDFOR
ENDFOR
RETU
 

当然,在解决具体问题时,可以将情况简化一下,以提高运行速度。

假设公鸡为x只,母鸡为y只,则小鸡只能是100-x-y只,也就有了3x+5y+(100-x-y)/3=100。从这个二元方程,不难看出大体情况是:公鸡最多33只,最少是没有,即0<=x<=33;母鸡最多20只,0<=y<=20,所以可能的方案有34*21种,在这么多的方案中,可能有一种或几种方案正好符合相等的条件。

我们如何将这34*21种方案罗列出来呢?最好的办法是用循环。可用两层循环的嵌套,即将一个关于公鸡数和一个关于母鸡数的循环嵌套起来,就能将所有的方案都遍历一次。后面的问题就成了如何判断哪一种方案是我们寻找的符合条件的方案呢?只能根据“百钱买百鸡”即3x+5y+(100-x-y)/3=100作为条件,在条件成立时输出xy100-x-y的值。当然要注意将3x+5y+(100-x-y)/3=100改写成VFP表达式。源程序ex6_2.prg如下: 

结论:这种解决问题的方法叫穷举法,将可能的情况一网打尽。不过在编写程序的过程中,我们最好还是根据具体问题适当地做些优化,缩小穷举的范围,以加快运算的速度。

SET  TALK  OFF
FOR  x = 0   TO   33
  
FOR  Y = 0   TO   20
    
IF   3 * x + 5 * Y + ( 100 - x - Y) / 3 = 100
      ? 
" 公鸡、母鸡、小鸡的数量分别有: " ,x,Y, 100 - x - Y
       ENDIF
    ENDFOR
ENDFOR
RETU
发布了24 篇原创文章 · 获赞 5 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/cdbqss1/article/details/1547214
今日推荐