推书帮
值得收藏的小说推荐网

第2章

周一上午,第一堂编程课。

教室在主楼三层,阶梯教室,能坐一百多人。计算机系的新生全部到齐,58个人坐了前五排。

苏念坐在第三排靠窗的位置,方晓薇坐她旁边,周雨桐坐方晓薇旁边。三个女生坐成一排,在一片黑压压的男生中间格外显眼。

陈教授踩着点走进来,把一摞讲义拍在讲台上。

“今天第一堂课,不讲理论,直接上机。”

全班一阵动。第一堂课就上机?不先讲语法吗?

陈教授推了推眼镜:”你们是华清计算机系的学生,不是零基础的小白。在座的大部分人高中都学过编程,有些还拿过竞赛奖牌。所以我不打算浪费时间讲’什么是变量’这种东西。”

他转身在黑板上写了一道题:

“用C语言实现一个函数,输入一个正整数n,输出n以内所有素数的和。要求:时间复杂度不超过O(n√n)。”

“给你们二十分钟。写完的举手,我来看。”

教室里安静了两秒,然后响起了噼里啪啦的键盘声——每个座位上都有一台电脑,已经打开了编程环境。

苏念看了一眼题目。

求n以内素数之和,时间复杂度O(n√n)。

这道题对于计算机系新生来说,难度适中。常规做法是对每个数逐一判断是否为素数,判断的方法是试除法,从2除到√n。

但苏念脑子里第一个跳出来的方案不是试除法,而是埃拉托斯特尼筛法——时间复杂度O(n log log n),比题目要求的O(n√n)还要优。

她决定用筛法。

不是为了炫技,而是因为这个方法确实更好。

苏念的手指落在键盘上,代码像流水一样涌出来。

变量声明,数组初始化,筛法核心循环,求和,输出。

每一行代码都简洁明了,变量命名规范,缩进整齐,关键步骤有注释。

五分钟。

苏念举手。

全班的键盘声戛然而止,所有人都转头看向她。

陈教授走过来,弯腰看了看她的屏幕。

沉默了五秒。

“你用的是筛法?”

“是。埃氏筛,时间复杂度O(n log log n),优于题目要求。”

陈教授又看了几秒,点了点头:”编译运行一下。”

苏念按下运行键。

程序瞬间输出了结果。

陈教授拿出计算器验算了一下,抬起头,表情很微妙——像是在一堆毛坯房里突然看到了一栋精装修的别墅。

“正确。而且代码质量很高。”他直起身,看着苏念,”你之前学过编程?”

“自学的。”

“自学到这个水平?”

苏念微微一笑,没有多解释。

陈教授转身走回讲台,对全班说:”苏念同学五分钟完成,用的是筛法,时间复杂度优于题目要求。有兴趣的同学可以下课后找她交流。”

教室里响起一阵低低的议论声。

“五分钟?”

“筛法?我都没想到用筛法……”

“她不是高考状元吗?编程也这么强?”

方晓薇在旁边激动得脸都红了,小声说:”念念你太帅了!”

苏念摆了摆手,靠在椅背上,目光不经意地扫向最后一排。

顾衍正低着头敲代码,速度很快,表情专注。

苏念注意到他的打字姿势——标准的十指盲打,手指几乎不离开键盘中间那一排,效率极高。

一个真正的键盘手。

又过了三分钟,顾衍举手了。

他是第二个完成的。

陈教授走过去看了看他的代码,点了点头:”也是筛法。不错。”

然后陈教授皱了皱眉:”但你的代码没有注释。”

顾衍低声说:”代码本身就是注释。”

陈教授:”……以后加上。”

苏念听到这句话,差点笑出声。

“代码本身就是注释”——这句话她前世在技术论坛上见顾衍说过。当时她怼了他一句:”你的代码确实不需要注释,因为反正也没人看得懂。”

顾衍当时回了一句:”看不懂是读者的问题,不是作者的问题。”

然后两人就这个话题吵了三天。

现在想想,还挺怀念的。

——

下课后,苏念收拾东西准备走,一个男生拦住了她。

“苏念同学,你好,我叫张浩。”就是自我介绍时说喜欢打游戏的那个,”你刚才那个筛法写得真好,能加个联系方式吗?以后有问题想请教你。”

“可以。”苏念报了自己的手机号。

张浩刚走,又来了两个男生,也是来要联系方式的。

然后又来了三个。

苏念一一应付,心里有点无奈。

她知道这些人里,有些是真的想交流技术,有些只是好奇”全省状元+女生+编程强”这个组合。

但无所谓。人脉就是这么积累的。

等人都散了,苏念背起书包往外走。

走到教室门口的时候,她注意到顾衍还坐在最后一排,对着电脑屏幕发呆。

不,不是发呆——他在看苏念的代码。

陈教授上课的时候把苏念的代码投影到了大屏幕上做示范,顾衍大概是拍了照,现在正在手机上一行一行地看。

苏念犹豫了一秒,走了过去。

“看什么呢?”

顾衍吓了一跳,手机差点掉地上。

他抬起头,看见是苏念,耳朵瞬间红了。

“我……我在看你的代码。”

“觉得怎么样?”

顾衍沉默了两秒,像是在组织语言。

“筛法的实现很标准,但你在求和的时候用了一个技巧——把布尔数组直接当作0和1参与运算,省了一次条件判断。这个写法……很聪明。”

苏念挑了挑眉。

他居然注意到了这个细节。

这个技巧确实不起眼,但能省掉一次分支判断,在大数据量的情况下能提升不少性能。一般的新手不会注意到这种微优化。

“你的代码我也看了。”苏念说。

顾衍的耳朵更红了:”怎……怎么样?”

“逻辑很好,效率很高。”苏念顿了顿,”但是——”

“但是什么?”

“你的变量命名太随意了。i、j、k、n、m、t——你是在写代码还是在做数学题?而且没有注释,没有空行分隔逻辑块。你这代码跟你这个人一样——”

顾衍紧张地看着她。

“能跑,但没人看得懂。”

顾衍愣了三秒。

然后他的嘴角动了一下——不是笑,更像是一种不知道该怎么反应的抽搐。

“我……我会改的。”

“不用改。”苏念背起书包,转身往外走,”你的代码风格有你的道理,我只是吐槽一下。”

走到门口,她回头看了一眼。

顾衍还坐在那里,低着头,耳朵红得像要滴血。

苏念笑了笑,走了。

有意思。

二十岁的顾衍,比她想象中还要社恐。

但他的代码确实写得好——那种浑然天成的好,不是靠经验堆出来的,而是靠天赋。

苏念前世见过很多程序员,能称得上”天才”的,一只手数得过来。

顾衍是其中之一。

而现在,这个天才坐在她的教室里,看着她的代码,耳朵红红的。

苏念走在华清的林荫道上,九月的阳光透过树叶洒下来,在地上画出斑驳的光影。

她忽然觉得,重生这件事,除了改变命运之外,还有一个意想不到的好处——

她可以在最好的年纪,遇见最好的人。

而不是像前世那样,在最疲惫的时候,和最好的人擦肩而过。

继续阅读