8月 042014
 

还记得小学时做过的数学题吗?记得那时候做过的什么“相遇问题”、“追及问题”、“鸡兔同笼问题”,解决方法是四则运算。后来学会了方程,就把从前的解法全忘了。有一次收拾书柜,翻出一张小学试卷,有一道题目,我只用了两步的四则运算就做出来了,换现在我只会列二元一次方程组来求解。我看着当时的算式发呆,因为怎么也看不懂每一步是什么意思。

有人在统计之都提出了一道小学生的数学题:

请问如何用R编程:A,B,C,D为0到9的整数,
A B C D
    × 9
-----------
D C B A
求 A,B,C,D的值。

看到此帖,我仿佛回到了小学时光里。当时解决这种问题不在话下,现在却是人越来越懒,脑子越来越笨了。能用机器的,就不想思考。有人回复的 R 代码是这样的:

for(i in 1001:9999){
    if(as.character(i) == paste(rev(strsplit(as.character(i*9), NULL)[[1]]), collapse="")){
        print(i)
    }
}

看来简洁,读起来却费劲。事实上,这短短的代码背后藏着很多步骤,换个写法展开后就容易看懂了:

for(i in 1001:9999){ # 穷举,每个数都试一下
    i.char = as.character(i) # 把数i转换成字符串
    j = i * 9 
    j.char = as.character(j) # 把数j转换成字符串
    j.char.array = strsplit(j.char, NULL)[[1]] # 把字符串拆成单个字符
    j.char.array.rev =rev(j.char.array) # 把字符按倒序排列
    j.char.rev = paste(j.char.array.rev, collapse = "") # 把字符合并成字符串

    if(i.char == j.char.rev){ # 判断是否符合题目的条件
        print(i)
    }
}

用的是穷举法,把1001到9999之间的所有数都试了一遍。这是大学生的水平。

另一位网友说:

人脑一小步,电脑一大步。A必然1,D必然9;推得B必然0;推得C必然8。所以是1089。

这才是小学生的水平。

本文发表于“大鹏志”(dapengde.com),2014年01月01日于Bayreuth。

  22 Responses to “一道小学数学题”

  1. 看来大学生果然是傻掉了


  2. 解决问题思路不同
    有时最简单的方法,我们却忽略了

    小学生办法很好

  3. 题目有问题:A,B,C,D为1到9的自然数,B为0…

  4. 这是说明读太多书也不大好吗,

  5. 知道的越多,考虑的越多~

  6. 确实是小学题目,1089可以直接推出来的,先把首位两个数推出来1和9,中间的试探下就出来了!

  7. 上面的编程是R编程?看了好多遍还是不能理解。

  8. 学院派的人的专长就是要把简单的事情复杂化,要不然要失业,哈哈哈。。。

 填写评论

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(必填)

(必填)

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据