问题:百钱买百鸡 程序
首先你有几点是错误的: 不管什么程序,如果循环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,很明显。多计算了一次循环,与其这样,不如: 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) rooster=rooster+1 hen=0 //这儿让其重新循环开始。 END IF hen = hen+1 LOOP UNTIL hen>33 rooster = rooster+1 LOOP UNTIL rooster> 19 END
比较一下,两者可实现的结果是一致的,但循环的次数要少一次,每次正确匹配结结果就少一次,总计会少20次!(如果是鸡雏与鸡母与鸡翁都不能为0时)此程序可将初始条件做一下更改! 如果你对百钱买百鸡 程序这个问题有好的意见或
建议,请留言
|