Tag Archives: 程序

《如果要我出程设题》官方参考答案

前几天作《如果要我出程设题》,本漫思所启而作,不意众猿兄媛妹抬爱,竟得一时风靡。然原文实乃随笔所作,多有未审之处,网上诸君引经而论,竟见余 之所未见,发余之所未发,实令余既难免汗颜之处,亦多有拜服之叹,故知浩哉华夏,吾道不孤。今撰此参考答案一份,虽以官方之名,终是一家之言,唯送诸此嚣 嚣尘世,以待高士斧正。

题目原文链接:http://liyaos.com/blog/programexam/

一,选择题:

1, ABC皆对。这题只是送分而已,不同的角度看待二进制思想这一名词,自会得出不同的答案。伏羲氏以阴阳两爻和天地人三才创立先天八卦阵,可以看作是 3bit的二进制数,即二进制思想之启蒙;但伏羲氏毕竟是传说中的人物,而后世作后天八卦阵以及推演周易六十四卦的周文王不但在历史上的可信程度大了很 多,而且还把3bit二进制数推广到了6bit,此二进制思想更完善,如果对二进制思想的定义较高,周文王显然是更好的答案;如果要求二进制思想必须是完 整的思想体系的话,那么还是莱布尼茨这位兄台更加准确。柏拉图虽持二元之论,但此与二进制思想相差尤远,故不采。

2, D,指针。“指”为指针,“物”为数据。

3, C,java/javascript。单从表面上可以看出来,题目中两组对应关系都是名字相似却本质毫无联系的事物,因此java和javascript 这组对应关系更加类似。此外这两组对应关系出自一副对联,曰:“蔺相如,司马相如,名相如,实不相如;魏无忌,长孙无忌,彼无忌,此亦无忌”,将此对联与 这一组对应关系相较,岂不暗合!

4, B,分治。破其合纵,远交近攻,收买重臣,分而治之。

5, C,记忆化搜索。用毛线标记出已经走过的路径。

6, A,神经网络。题目里面扯上这个电影主要是想开阔下自己出题的思路。电影里这个机器人了解事物要靠学习,显然是强人工智能,但其学习的过程并不类似遗传算法所应表现出来的,所以神经网络最为接近。

7, D,不会定义自己的需求。A和B显然是以偏概全,问题纠结于C和D两个选项。齐王渴望士,但却不知道自己渴望什么样的士,这更接近于软件工程中客户不会定 义自己的需求的情形;而按照我自己的理解,倘若齐王知道什么是士,却无法讲出来什么是士,这才叫做“不会下定义”。故此题答案为D。

8, C,衍生类未重载。不理解的同学烦请自行查阅“卵有毛”这个命题是怎么推导出来的。

9, A,继承。这个有疑问吗?

10, C,统一接口。张居正改革以前明朝的赋税制度是非常混乱的,其一条鞭法极重要的一点便是将各种杂七杂八的赋税徭役统一了起来,即统一接口。泛型编程在于可以接受各种数据类型,与此不符。

二,匹配题:

A1 – B3(将东西南北逐一穷举);

A2 – B2(关键为“蓦然回首”一句);

A3 – B5(不解释……);

A4 – B1(讥讽南明福王及其府下臣子只知贪图眼前光景);

A5 – B4(将飞鸟的动作拆分成无数部分,则飞鸟的每一刻的影子都是重新生成的,是不动的。其实这题我本来想用“镞矢之疾,有不行不止之时”这一句的,却鬼使神差地写下了这一句)。

三,阅读理解:

1,微软亚洲研究院。

2,斐波那契数列中每一项是前两项之和,是一个单调递增序列,而且越到后面其增长越快,所以搭配了“漫延”这个词语。这象征了我对“你”的思念每一 天都如同和把之前的叠加在一起,这般与日俱增,而终如洪水般“漫延”。亦有人提出斐波那契数列的通项公式是由无理数构成,但每一项却都是有理数,这种因既 无理而果又有理的纠结恰恰很好地诠释了思念之情的意义。我要承认这后面一点我身为作者也未曾想到。

(其实写的时候我并没有想太多,所以文囿同学“其实这就是作者信笔所至之处,比喻虽甚不恰当,到底无伤大雅”的评价还是很正确的……)

3,作者写这句话其实是表达了他对他学的软件工程概论课程的感慨……搞软工的人,你们懂的。

4,过去在哪儿听说算法有不变性这一特征,但是这个说法似乎不太严谨,这里我倾向于采用高德纳(即Donald E. Knuth)的提出的“明确性”(或者说被翻译出的)这一说法。

5,匈牙利算法是二分图匹配算法,对每个点通过寻找可增广路改进的方式得到最大匹配。原文用“牵手”形容匹配,用“画面”一词将算法过程中的某一步匹配定格,这个匹配是否问最终匹配并不重要,重要的只是此刻。

这里顺带贴出杨弋大神的第5题答卷:“匈牙利算法的特点是一旦牵手了就永远有手签,每次增广路经过自己的时候还会换一个。所以该作者喜欢牵手画面其实喜欢的是将来一直有手牵的可能性,与文中的“你”是谁没有关系……”(我对天发誓这不是作者的原意 = =||)

对付NYTimes的石头剪刀布Novice Computer的出招表

题目中涉及到的电脑AI在这里:

http://www.nytimes.com/interactive/science/rock-paper-scissors.html?hp

里面电脑AI分为两种,Novice和Veteran,前者是根据你的出招习惯来出招,后者是根据之前所有对战的统计数据来出招。虽然从名字上来看 Novice是初学者,Veteran是老将,但是真正玩起来老将未必比初学者强大,因为全人类的出招习惯实在不能说很靠谱……但是另一方面,如果你本身 就没有出招习惯,或者说出招习惯本身就是一个圈套呢?

这就是击败Novice电脑的思想。而我用了一个最无赖的方法便是本地写了一段代码模拟Novice电脑的算法(算法思想在它的网站上点击See What Computer is Thinking便可以看到),也就是说,Novice电脑根据某算法判断我的出招习惯然后出招克制,我也用同样的方法计算我的出招习惯然后反其道而行 之。

当然这是获胜的方法,但未必是胜率最大的方法。如果伪造自己的出招习惯是否能造成一个循环,而又是否可以找到一个胜率最大的循环,这类的问题也还颇有可以进一步思考之处。

下面给出一张我用自己写的一个本地程序计算出来的一种出招表,以及我用这个出招表得到的结果,有兴趣的同学可以尝试一下,并把你的胜率情况告诉我。
注意:出招表大概在10回合以后开始发挥威力。

Round 1 : Scissors
Round 2 : Paper
Round 3 : Paper
Round 4 : Scissors
Round 5 : Scissors
Round 6 : Paper
Round 7 : Paper
Round 8 : Rock
Round 9 : Rock
Round 10 : Scissors
Round 11 : Rock
Round 12 : Scissors
Round 13 : Scissors
Round 14 : Rock
Round 15 : Paper
Round 16 : Scissors
Round 17 : Paper
Round 18 : Rock
Round 19 : Scissors
Round 20 : Scissors
Round 21 : Scissors
Round 22 : Scissors
Round 23 : Paper
Round 24 : Rock
Round 25 : Paper
Round 26 : Paper
Round 27 : Scissors
Round 28 : Paper
Round 29 : Scissors
Round 30 : Rock
Round 31 : Rock
Round 32 : Paper
Round 33 : Rock
Round 34 : Scissors
Round 35 : Paper
Round 36 : Scissors
Round 37 : Scissors
Round 38 : Rock
Round 39 : Rock
Round 40 : Rock
Round 41 : Scissors
Round 42 : Scissors
Round 43 : Scissors
Round 44 : Paper
Round 45 : Scissors
Round 46 : Scissors
Round 47 : Scissors
Round 48 : Rock
Round 49 : Scissors
Round 50 : Paper

如果要我出程设试题

一,选择题(皆为单选):

1,以下谁是二进制思想的最早提出者?

a,伏羲;b,姬昌;c,莱布尼茨;d,柏拉图。

2,以下哪个概念和公孙龙的《指物论》中的“指”字含义相近?

a,变量;b,数组;c,对象;d,指针。

3,蔺相如,司马相如;魏无忌,长孙无忌。下列哪一组对应关系与此类似?

a,PHP,Python;b,JSP,servlet;c,java,javascript;d,C,C++。

4,秦始皇吞并六国采用了以下哪种算法思想?

a,递归;b,分治;c,迭代;d,模拟。

5,雅典王子忒修斯勇闯克里特岛斩杀米诺牛的时候采用了以下哪种算法?

a,动态规划;b,穷举;c,记忆化搜索;d,Dijkstra算法。

6,印度电影《宝莱坞机器人之恋》中的机器人七弟采用的智能算法最有可能是以下哪一种?

a,神经网络;b,遗传算法;c,模拟退火;d,穷举算法。

7,《公孙龙子》记载:“齐王之谓尹文曰:‘寡人甚好士,以齐国无士,何也?’尹文曰:‘愿闻大王之所谓士者。’齐王无以应。”这说明了齐王:

a,昏庸无道;b,是个结巴;c,不会下定义;d,不会定义自己的需求。

8,惠施曾提出过“卵有毛”的命题,以下哪一项是导致这个错误命题的原因:

a,混淆了命名空间;b,引入了错误的包;c,衍生类未重载;d,调用了危险的指针。

9,下面哪种面向对象的方法可以让你变得富有?

a,继承;b,封装;c,多态;d,抽象。

10,明朝时期张居正改革的一条鞭法的主要思想是:

a,面向过程;b,万物皆数;c,统一接口;d,泛型编程。

二,匹配题(分析A中的句子所体现的算法,和B中的算法一一匹配):

A:

1,江南可采莲,莲叶何田田,鱼戏莲叶间。鱼戏莲叶东,鱼戏莲叶西,鱼戏莲叶南,鱼戏莲叶北。——汉乐府《江南》

2,众里寻他千百度,蓦然回首,那人却在灯火阑珊处。——辛弃疾《青玉案》

3,从前有座山,山里有座庙,庙里有个老和尚,再给小和尚讲故事,故事内容是:从前有座山,山里有座庙,庙里有个老和尚,再给小和尚讲故事,故事内容是:从前有座山,山里有座庙,庙里有个老和尚,再给小和尚讲故事,故事内容是……

4,只劝楼台追后主,不愁弓矢下残唐。——孔尚任《桃花扇》

5,飞鸟之影,未尝动也。——《庄子》

B:

1,贪心;

2,回溯;

3,穷举;

4,分治;

5,递归;

三,阅读理解(阅读下文,回答后面的问题):

爱在程序间

作曲:周杰伦;作词:梦里醉逍遥

美国的贝尔实验室设计了最初的C语言
刻在UNIX操作系统距今已有三四十年
你在屏幕前凝视数据的缱绻
我却在旁轻轻敲打键盘把你的梦想展现
循环 递归 贪心 动规 是谁的从前
喜欢在匈牙利算法中你我牵手的画面
经过MSRA门前我以大牛之名许愿
思念像斐波那契数列般漫延
当软工沦落在设计的文档间
算法依旧是永垂不朽的诗篇
我给你的爱写在程序间
深藏在最长不下降子序列里面
几万组数据流过后发现
我的心依然不变
我给你的爱写在程序间
深藏在最长不下降子序列里面
用无尽的代码刻下了永远
那已保存千年的誓言
一切又重演
我算了很多遍
时间复杂度还是趋于无限
我只想要这样永远链接在你的身边

1,题目中的MSRA是什么的缩写?

2,试赏析“思念像斐波那契数列般漫延”一句。

3,请结合时代背景,谈谈你对“当软工沦落在设计的文档间,算法依旧是永垂不朽的诗篇”一句的理解。

4,“几万组数据流过后发现,我的心依然不变”一句体现了算法的什么特性?

5,就“喜欢在匈牙利算法中你我牵手的画面”一句,谈谈你对匈牙利算法的理解。

高校难混

作词:梦里醉逍遥 作曲:周杰伦

读书声 遁入空门 折煞了世人
梦偏冷 辗转一生 笔记又几本
如你默认 生死枯等
枯等一点 又一点的 学分

狄克雷 断了几点 断了谁的魂
重积分 一片残垣 狰狞的牛顿
容我搜索 回溯转身
等图连通 等你评 谁是神犇

雨纷纷 新代码bug深
我听闻 你还在做数分
斑驳的课本 盘踞着相对论
纸张上滴落的是 乙醇

雨纷纷 新代码bug深
我听闻 你仍做着数分
寝室键盘声 悔当初不学文
杯具落地生根是 我们

Continue reading