知识屋:更实用的电脑技术知识网站
所在位置:首页 > 教育

大一学习C/C++时是否需要大量刷题?

发表时间:2022-03-24来源:网络

首先你们老师说的非常正确!

不管怎么样,刷题一定是需要的!!!

提醒大一大二的小朋友们,一定要早点刷题。

刷题是个长期的过程。大学时间多,每天没事刷下题是应该的,打打基础,练练编程。

刚开始刷题的时候,每个人都是很吃力的。

因为你用了好多年的思维方式和刷题的方式还是不同的,这是个思维转变的过程。

对刚开始刷题的小朋友来说,可能刚开始题目都看不懂,这是很正常的事。

作为大学玩了三年 ACM,拿过亚洲区域赛银奖的老学长说下怎么刷题吧。

刷题不是瞎刷题,什么是瞎刷题,就是看到一道刷一道,这是很多刚开始刷题的同学容易犯的毛病。

有的追求数量,刷了一堆简单题,沉迷在 AC 的快感中不能自拔,在深深的自我感动中依然菜的扣脚。有的追求无脑,看到一道题就去网上搜答案,以为会解决问题,实则搜到了还看不懂,正好一劳永逸,给自己下了不是这块料的断言,成功的做到了开始即结束。

别问我为什么知道,我才不会告诉你当年我就是这样...

针对 LeetCode,题的解法有很多,我们往往追求的是最优解,这里有一份清华学长整理的 LeetCode 最优解,强烈推荐:

其实怎么用正确的题海战术,在我看来,其实也还是两步:

多题一解第二步一题多解。

当然在此之前,我觉得你得先搞明白什么是时间复杂度和空间复杂度,不然不懂这些指标,你也不知道算法对于你当前题目的优劣。之前写过一篇旧文,有兴趣的可以看一下。

下面一大波干货来袭,千万记得帮我 @Rocky0429 点赞呀,么么哒

一、解题方式

多题一解

多题一解,就是把多种同类型的题先放在一起来做,也就是俗称的刷专题。下面是我当年刷题的一部分分类的截图:

当然我也不是全盘否定技巧,但是你连个两三百道题都没刷完,你就在这给我讲你要技巧,我会认为你是在耍流氓...

二、代码实现

一道题有了思路,其实这道题的 90% 你已经解决了,把它实现出来按理来说就是自然而然的事儿了。

当然可能有同学知道了思路,但是就卡在这 10% 不知道怎么实现上,那这就是你写代码的能力问题,其实一样的,这就是不熟练,不熟练的原因就是练少了。

其实这个问题的唯一解还是所谓的“题海战术”,多练习,唯手熟尔。

刚开始的时候不管是书上的例题,一些简单的水题或者你想实现的一个简单的东西,按照你的想法写出来或者看一遍别人怎么写的,自己再一步一步的默敲,不要怕麻烦,一定要自己动手,不要看会了,我们都知道看会了其实不是真正的会。但是慢慢当你习惯了这种方式,你的代码能力会潜移默化的变强。

别问我为什么知道,我难道要说作为一个当年上了大学半年还没写过一次超过 20 行的代码的男人,经过一个寒假以后,能切百十行代码的题?

也太丢面儿了吧,说好的整个学霸人设呢...

三、小灶

咦?不是只有两步嘛,哪来的第三步?

嘿嘿,总得给能坚持看我说废话看到这里的同学开个小小灶不是...

其实还有两点是我想说的,而且这两点是我觉得在整个过程中最重要的。

做总结

怎么说呢,做总结这件事的好处,谁做谁知道,不信你就试试...

每道题有每道题的总结,每种类型的题有某类题的总结,千万不要怕麻烦,虽然刚开始的时候确实会很麻烦...

每每回想起来,我最后悔的就是在我刚开始刷题的时候没有做总结。当年集训队老师告诉我们每道题做完都要把题解发布到 CSDN 上,记录自己的思路,解题方式和代码。这件事乍一听我觉得太麻烦,觉得“有这个时间我多刷道题它不香嘛”,一直当作耳旁风。

后来真正开始在 CSDN 上发题解,并不是我突然顿悟,而是集训队老师看我们太懒,强制执行,然而这个强制,在经过初期的不适以后,慢慢的让我形成了做什么都要总结记录的习惯,一下子就写了 6 年。下面是刚开始的一些截图:

习惯性梳理总结,在这个过程中重新产生更多的认识,理解更深,有更多的想法,无论后来成为 CSDN 的博客专家(Rocky0429)或者后来开始写公众号(Python空间,id:Devtogether),都是因为这种积累,我因此而获益,对我们老师感激一生。

保持热情

保持热情,不仅仅是能坚持,而要在坚持上最好能带有一点兴趣。刷题真的是一个很漫长的过程,如何在这个过程中能坚持下去真的很难做到...

我觉得你最好有一个最终的目标,这个很多开始刷题的同学肯定都有,不然没人闲着没事找事去刷题,有了最终的目标朝着这个方向去努力,同时把这个过程分成一部分一部分,比如拿刷专题来说,我这段时间刷链表,下段时间刷贪心,再下段时间刷 dp...

将目标量化为可衡量的每一段,自己有了掌控感,一步一步的向着最终的目标前进,知道自己离着还有多远,不至于半途而废。

拿我自己来说,当年搞 ACM,半年以后我已经准备放弃了,那段时间完全迷茫,觉得自己水平很差,没有机会去参加比赛,不可能拿到奖牌。那段时间我开始去寻找别的出路,去参加 Python 的社团,准备转去做项目。

浑浑噩噩了一圈,最后还是回去做 ACM,一方面是不想让自己半年的努力付诸东流,对拿牌子的执念,更多的是我发现坐在那写项目和做题比起来,我更喜欢 AC 的快感。

以上就是我的一点点经验,其实没有什么新鲜的,有点啰嗦,也不一定能让你有什么进步。我一直觉的只要我们付出了时间和努力,开始向更好的方向迈出第一步,我们解决问题和写代码的能力就会潜移默化的提高。

在这个过程中,收获的远比去解决问题更有成就感,当然这种感同身受更多的需要你自己在这个过程中去体验。

四、刷题顺序

分享下自己总结的【LeetCode 刷题顺序】,希望能帮助大家少走一些弯路。

这份清单我会一直更新,同样也会一步步的把每个知识点的入门讲解每道题的题解用“图解”的方式分享给大家。

站在初学者的角度,用最直白的方式和最易懂的代码,最大可能摒除不同编程语言的带来的干扰,理论 + 实战,带你彻底搞定数据结构与算法。

下面就是我为大家精心挑选的 LeetCode 题目清单,按照知识点进行分类,大家可以根据知识点,有针对性地刷题。

希望对你有所帮助

题主还问 C/C++ 要学到什么程度,那得先来看 C 和 C++ 有哪几个学习阶段:

C 语言的学习其实就三个阶段就好了:

(1) 入门阶段

这个阶段学习 C 语言的基础语法知识。

目标是可以开发一些简单的控制台小程序。

(2) 提高阶段

这个阶段学习 C 语言自带的库函数,形成 C 语言的基本知识框架。

目标是开发一些基本的应用程序。

(3) 应用阶段

这个是实战阶段,要具备一定的综合性应用软件开发能力。

目标是能够开发像贪吃蛇、图书管理系统、学生信息管理系统等项目。

C++ 语言的学习其实也是三个阶段

(1) 入门阶段

这个阶段的学习主要是熟悉 C++ 语言的语法知识。

在这个阶段要做到理解对象的思想方法,培养自己的编程思维能力。

目标是可以开发一些像贪吃蛇这种简单的控制台小程序。

(2) 进阶阶段

进阶阶段的学习主要是要掌握 C++ 标准模板库(STL)、设计模式、数据结构基础以及 UI 界面开发、数据库开发等高级技能。

在这个阶段是要达到可以开发复杂的程序,达到工作中 C++ 开发程序员的能力。

(3) 应用阶段

这个是实战阶段,要具备一定的综合性应用软件开发能力。

关于语言的学习我觉得最好能学到提高阶段,不管你以后主打什么语言,学习语言的方法都是相通的。

再来说专业课。

计算机基础一定要好好学,不管以后面试找工作还是保研、考研都很有用。

重中之重是以下几门课:

数据结构与算法计算机组成原理操作系统计算机网络数据库

其实你按照我说的这些一路走下来,基本就没什么问题。

码字不易,记得帮我 @Rocky0429点赞呀。

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜