百钱买百鸡 程序

来源:百度知道 编辑:UC知道 时间:2024/06/08 17:00:59
我国古代数学家张邱建编《张邱建算经》中记有有趣的数学问题:“今有鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。凡百钱,买鸡百只,问鸡翁、母、雏各几何?”你能用QBASIC程序解决这个问题吗?

我们自然有一种思路,即:
公鸡(鸡翁)不能超过20只,母鸡不能超过33只,小鸡不能超过300只。所以我们只要用3个计数变量控制循环即可。
rooster=1
hen=1
chick=1
DO
DO
DO
money = rooster*5 + hen*3 + chick/3
IF money = 100 THEN
PRINT rooster, hen, chick
END IF
chick=chick+1
LOOP UNTIL chick>300
hen = hen+1
chick = 1
LOOP UNTIL hen> 33
rooster = rooster+1
hen = 1
LOOP UNTIL rooster>20
END

理论上来讲,这种方法行得通,但实际运行中就是行不通,因为该程序有198000次循环,近一百万行程序,QBASIC根本承受不了。
哪位大侠能告诉我简单的程序啊?谢谢!

首先你有几点是错误的:
不管什么程序,如果循环198000次就根本承受不了,那就不要说自己是一个程序。也就是198000次的循环对于编程语言来说根本是小菜一碟。

理论上讲行得得通,其实就行得通,只不过你的程序有问题而已,循环的嵌套,内层初始值应在内层,一般不是定义在所有层的!

有一个问题你注意了没有?编程序不能一味地让计算机运算,如果所得的财数大于100时没有必要再计算了,所以要重置循环条件,重新循环,这样速度快些!例如:鸡翁已是18,鸡母已经是4,此时总钱数已经102了,还有必要对计算鸡雏吗?

另一个注脚就是题中的隐含条件,鸡雏一定是3的倍数,你信吗?那么鸡雏就应该是3为步进值而不是1!事实上鸡雏的循环最多也只有101次,考虑0的情况!但既是百钱买百鸡,鸡雏的个数绝不可能超过一百只!而且三者的总和是100!以上程序只要两个循环就够了!

rooster=0
DO
hen=0
DO
money = rooster*5 + hen*3 + (100-rooster-hen)/3
IF money = 100 THEN
PRINT rooster, hen, (100-rooster-hen)
END IF
if money >100 then
rooster=rooster+1
hen=0 //这儿让其重新循环开始。
end if
hen = hen+1
LOOP UNTIL hen>33
rooster = rooster+1
LOOP UNTIL rooster> 19
END

我不希望你说不懂,就已经给你拆开写了!当钱只要大于100时就重新更正循环条件!真正的也可以与一个条件完成!那是因为,if money=100 then 后money 以后就会大于100,不可能再发生匹配的情况,因为hen加1个,chicken去掉一个,钱数只会个应地减加。所以下一次循环就会进行if money >100,很明显。多计算了一次循环,与其这样,不