當程序員面對小學數學題

  中午在公司吃飯,發現好多人在會議室討論一道數學題,聽着頗有意思,做爲數學控固然不能錯過這樣的機會,原來是同事拿着娃的小學題來找你們求助,題目是這樣的:「試卷有甲乙丙3類題,甲類題共6道,每題4分,乙類題共8道,每題5分,丙類題共8道,每題7分,問分數有多少種可能。答對有分,答錯或不答0分」。讀者不妨也思考一下java

 

 

 

  先說程序員的解法程序員

  從面向過程的角度思考,3個for循環,把全部分數遍歷一遍,再用一張hash表統計一下無重複的結果就好了,20行代碼差很少就搞定了,代碼我是不忍心貼了。5分鐘後各類版本的答案就出來了,有人說113,有人說116,還有人說165的....因而你們又開始互相對照程序找bug,真是一羣好員工啊。設計

  再提供一個haskell的一行代碼解法:數學

     length $ Data.List.nub [(a+b+c) | a<-[0,4..24], b<-[0,5..40], c<-[0,7..56]],哈哈,其實我是來黑java的。hash

  程序給出的答案是113,反推一下小學生應該怎麼解這道題,個人思路是,4,5,7這三個數是出題人特地設計的,4和5的差是1,5和7的差是2,假設任意一個分數值x,能夠經過少作一道4分題,多作一道5分題來獲得x+1分,或者經過少作一道5分題,多作一道7分題來獲得x+2分等等,從x-4到x+4的任意分數都是可行的。除了幾個不可能分數以外,這幾個數字應該能夠組合出從0到總分的任意分數。而後再來討論不可能分數都有哪些,總分是120分,直覺是越靠近60分不可能分數出現的可能越低,因而從0開始往上找,發現1,2,3,6這四個分數是不可能的,再往上試了幾個分數均可以,估計直到60就沒有不可能分數了,而後對稱一下,同理可得119,118,117,114也是不可能分數,因此答案是113for循環

相關文章
相關標籤/搜索