• 当程序员面对小学数学题


      中午在公司吃饭,发现好多人在会议室讨论一道数学题,听着很有意思,作为数学控当然不能错过这样的机会,原来是同事拿着娃的小学题来找大家求助,题目是这样的:“试卷有甲乙丙3类题,甲类题共6道,每题4分,乙类题共8道,每题5分,丙类题共8道,每题7分,问分数有多少种可能。答对有分,答错或不答0分”。读者不妨也思考一下

      先说程序员的解法

      从面向过程的角度思考,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的。

      程序给出的答案是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也是不可能分数,所以答案是113

  • 相关阅读:
    Python之二维数组(list与numpy.array)
    too many values to unpack
    python 寻找可迭代(list)的目标元素的下表方法
    zip函数
    map函数
    Sokcet代码错误类型
    PL-VIO Docker测试
    如何检索国外博士论文
    EuRoc V203数据集的坑
    Tracking of Features and Edges
  • 原文地址:https://www.cnblogs.com/easymind223/p/5309701.html
Copyright © 2020-2023  润新知