[原创]腾讯百度笔试题强势分析,关于haskell的逆袭


最近在博客园看到了据说是腾讯和百度的笔试题,原文地址
http://www.cnblogs.com/bestDavid/p/ExaminationTencent.html
http://www.cnblogs.com/bestDavid/p/ExaminationBaidu.html
确实是时候告诉大家haskell是多么美妙的一种语言了。闲话少说,直入主题。


腾讯2014软件开发笔试题目
-----9月21日,腾讯2014软件开发校招-简答题-广州

2、A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效。

---------------------------------------------------

module Main where --先把Main放到这再说

main = do print [x|x<-a,y<-b,x==y] --x符合这样的特征,x来源于a,y来源于b,并且x和y是相等的,好吧,如果这个还没有过瘾,来看下面这个!!!

a = [1,3,4,5,7,9,23,43] --给个整数集合a
b = [4,9,87,56,45,1,8,7,5] --给个整数集合b

---------------------------------------------------

百度2014校招笔试题目题解
----武汉站,9.28号百度校招笔试题目算法题目部分

1、给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如1101是重复数,而1201是不重复数。(15分)

---------------------------------------------------

{-题目的关键是重复数,在haskell中我们有一个武器叫模式匹配(不是正则哦),于是如果你知道什么是数学归纳法的话,秒秒钟的事-}
module Main where

main = do print $ head [x|x<-[a..],(renum $ show x)==False] --这里有haskell一个诱人的特性:惰性计算,Integer是枚举类型类的实例,于是x来源于[a..],你可能会说[a..]是个无穷集合,这个程序永远也跑不完吧?不要忘了我前面说的惰性计算,haskell可是很懒的哦,由于head,haskell就只会找到第一个比a大并且不是重复数的数啦

a = 23497811032 --给定一个数a

--数学归纳法重出江湖,语惊四座。解释用show将a转成字符串用renum调用
renum [] = False --初始条件:空字符串直接告诉他不是重复数
renum (x:[]) = False --初始条件:只有一个字符的不是重复数
renum (x:xs) =if x == head xs then True else renum xs --模式匹配(x:xs),一旦x和xs的第一个字符相同直接就是重复数,如果不同,继续用xs调用renum,这个直到初始条件,如此便是归纳法的世界了。

--------------------------------------------------

通过这两个例子,希望大家能够对haskell产生强烈的兴趣,看到不一样的卓越的编程语言是如何思考世界的。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM