前言

C++是一种计算机高级程序设计语言,由C语言扩展升级而产生 ,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。
C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。
C++拥有计算机运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。

Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆 于1990 年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。
2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20年来首次将其置于Java、C和JavaScript之上。

描述

描述

给定一个int数组A及其大小n以及需查找的和sum,请返回数组中两数之和为sum的整数对的个数。保证数组大小小于等于3000。

测试样例:

[1,2,3,4,5],5,6
返回:2
class FindPair {
public:int countPairs(vector<int> A, int n, int sum) {map<int,int> st;int cnt = 0;for(int i = 0; i < A.size(); i++) st[A[i]]++;for(map<int,int>::iterator it = st.begin(); it != st.end(); it++){map<int,int>::iterator ifind = st.find(sum-(it->first));if(ifind != st.end() && ifind != it){cnt += (it->second * ifind->second);it->second = ifind->second = 0;}else if(ifind != st.end()){cnt += ifind->second*(ifind->second - 1)/2;ifind->second = 0;}}return cnt;}
};

写在最后
学习编程, 既要考虑诗和远方, 也要考虑眼前的苟且。

每年像你这样的学生不计其数,大一刚进校,一门C语言,学校发一本垃圾C语言教材,按时上课,老师在那里念念PPT,讲讲浮点型变量,malloc

啥的,你若认真听了,那你可能懂了,但是发现不会写,你若没听,玩手机了,你是既不懂,也不会写,上来上去,蒙在鼓里的人出不来,水平就一直这样,龟速增长。

有的学生学的一头雾水,开始怀疑自己,准备转专业,放弃计算机,有的学生学懂了,写程序一直报错,开始怀疑自己,有的学生觉得教材写得不好,去书店转了一圈,买了三四本C语言的书,但最后厚厚的灰尘盖在了书上,再也没翻过。

这三种学生,如果继续这样,最后都要凉凉。

马克思教给我们要具体问题具体分析,那我今天就来分析一下,计算机专业的学生,到底应该怎么学计算机,才能效果最好,进步最快。

如果你要学习物理,我推荐你顺着物理的发展史学习,先学习牛顿经典物理,再学习热力学

,电磁学这些不那么经典的,再学习相对论,量子力学这种彻底推翻经典物理的,再学习量子电动力学这种硬核的,比较前沿的,整个学习过程,是自底向上。

但是学习计算机,真的适合这样吗?

先学习电路,冯诺依曼结构,造一台计算机?然后再用汇编写个小操作系统?写个小编译器?最后一步一步往上走,最后开始用高级语言编程?

你要是这么学,必然爆炸。

计算机的学习最好应该是自顶向下。

这个顶,顶到什么程度?

有人说,C语言就是高级语言了,从C语言开始学就好了。

但是如果让我教计算机,我第一节课教学生们的,绝对不是C语言,而是教大家如何使用Github,Stackoverflow,告诉世界上正在发生什么,程序员之间是如何协作的,告诉你在这个大社区,你可以读到这个世界最牛逼的程序员写的代码。

我还要告诉大家如何使用云服务,告诉大家可以买一个一个月十块钱的学生服务器,自己做点有趣的事,我还要推荐大家去用Visual Studio Code,而不是简单粗暴的在机房装一个VC6,或者CodeBlocks,美其名曰,“我们当年用记事本还XXXX,现在的学生被惯坏了”这种话。

如果可以,我还会教同学们如何科学上网,让英文编程环境成为习惯,让遇到问题google,而不是百度成为习惯,让大家在第一节课上完,就能进入这个世界编程大社区,哪怕什么都不懂,你也能保证所在的社区,就是世界程序员的大家庭当你进入Github,看着各种有趣的项目的时候,相信我,你的视野就会在此为起点,快速打开,不断增长,进入一个良性循环。

而当刚上大一的学生第一次进入github时候,被眼前的各种没听过,没见过,但感觉很厉害的项目所吸引的时候,当他两眼冒光的时候,我就知道,他这四年,成了。

有人会这样说我:

“Github还用教?刚才你说的那些学生,如果能被C语言的困难打倒,那他也不适合做程序员,转行正好。”

像这种话,我想说,在很多时候,佛和魔仅在一念之间,你在最开始的时候点到了,给了他引导,他以后可能会马上进入一个正反馈

状态,如果你没点到,马上可能就负反馈了。

我一直觉得国内的计算机专业的学生很可怜。

当VScode表现越来越优异的时候,学生们还在机房用着VC6,看着密密麻麻的报错无可奈何。

当Google搜索可以精准定位你的问题的时候,学生们还在为百度搜索出来乱七八糟的搜索结果无可奈何。

你用百度,用中文搜索,你连stackoverflow都搜不出来。

但是你可以去问问,做一个调查,有多少大一结束的学生,没上过stackoverflow,不知道怎么在github里提交issue和pull request,你统计一下,看看这个比例有多大?

你再统计一下有多少比例的大一结束的学生没用过google,并且对其用不了的原因不太清楚?

视野打不开,一切都完了。

有人说,刚开始直接学了python这种很简单的高级语言,以后遇到C肯定被吓跑了。

事实恰恰相反,在你了解到python的性能问题时,你才会了解python是解释型语言,C是编程型语言,你才会思考为什么C更快,进而,如果需要用C,去学C。

在你在编程语言中涉及到了“原子性”,“同步”,“异步”,“线程”,“进程”,“内存分配“等概念的时候,你会自然而然地产生很多疑问,进而去学习操作系统,在学操作系统的过程中,你之前的一系列疑问逐渐被解决,这个过程是很爽的。

当你发现某个算法,人家的实现比你快很多的时候,你会自然地去思考,为什么我的程序运行这么慢,然后发现对方用的数据结构与你不同,甚至用了一些算法,比如动态规划等,这也会驱使你去学习算法,学习数据结构。

有了需求和疑问,再去学,这样一个过程,是学习的金钥匙。

你指望学生自己打开视野,但是那些自己打不开,需要你帮忙开下门的呢?

在你的视野被打开之后,我还希望你懂这些:

比如你学C语言,与其去做那些OJ题,不如在github上找个C语言项目,然后阅读,理解,修改,模仿。

个人认为在知识爆炸的年代,两不要:

学个啥都要买本教材,试图线性地,从头读到尾。

(真实情况:经典教材都能下载到免费pdf,语言,框架,文档往往已经写的很好,而且最新,github上有无数优质开源学习资源)

不读优质代码,不参考最佳实践,啥都要自己从头开始搞。

三个要:

要读文档,英文文档

做知识输出,用文字总结自己的学习内容。

多用命令行

我曾听过一种论调,说程序员不会用命令行也没关系。

我想说的是,第一,这个世界没有那么美好,什么都要给你做一个图形界面,第二,对于命令复杂,命令多的工具,就算做出来图形界面,往往比命令行更难用,而且命令行可以用命令行脚本进行批文件

自动化执行。

两个原则:

有问题,先文档,再stackoverflow,再技术文章

要用实例驱动学习,不要说你会什么,要说你做了什么

(每日一练C++)CC211 整数对查找相关推荐

  1. 【蓝桥杯每日一练】查找整数

    一.题目描述 本题要求从输入的N个整数中查找给定的X.如果找到,输出X的位置(从0开始数):如果没有找到,输出"Not Found". 输入 输入在第一行中给出两个正整数N(≤20 ...

  2. 6 获取数组中最小值_C语言每日一练8——数组中最大值和最小值

    题目: 利用指针函数,求某数组中的最大值和最小值. 实现代码: /* ================================================================= ...

  3. java每日一练:面试题集合

    6.29:1.说一下jdk和jre的区别? JRE是java运行时环境,包含了java虚拟机,java基础类库.是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的 ...

  4. python题目关于企业利润_【每日一练】巧用python实现利润计算

    原标题:[每日一练]巧用python实现利润计算 相信很多小伙伴都遇到过阶梯利率的问题,比如说银行的利息计算,不同阶段的本金有不同的利率:税务的税费计算,不同的营收有不同的缴纳率:个人的提成,不同的销 ...

  5. python 编程一日一练-python每日一练

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 过滤掉列表中的负数 筛选出字典{lilei: 79,jim: 88,lu ...

  6. python 编程一日一练-「每日一练」巧用python生成随机数

    原标题:「每日一练」巧用python生成随机数 随机数在我们的生产和生活中有很多的应用场景,比如说登录验证的随机数字等等,那么你知道在Python中怎么生成随机数吗? 往下看,就是这么简单! 题目 p ...

  7. python输出乘法口诀-【每日一练】python输出 9*9 乘法口诀表

    原标题:[每日一练]python输出 9*9 乘法口诀表 无论学哪种程序,哪一门语言都对输出9*9 乘法口诀表情有独钟,记得学VB的时候,需要好长一段代码才实现,那么你知道用Python输出,需要几行 ...

  8. python 编程一日一练-Python每日一练0013

    问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在. 解决方案 使用collections库的ChainMap类,可以快速的将多个d ...

  9. shell脚本每日一练(二)

    shell脚本每日一练 一.练习题 1.提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码.如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果已经存在用户,则提示用户已存在;如果用户不 ...

最新文章

  1. 用于HTTP加密浏览的TW2.0插件
  2. blob转file对象_C++核心准则C.41:构造函数生成的对象应该被完全初始化
  3. [转载]Google Guava官方教程(中文版)
  4. 谷歌浏览器中文版_GitHub上最励志的计算机自学教程:8个月,从中年Web前端到亚马逊百万年薪软件工程师 | 中文版...
  5. 2017年会是Serverless爆发之年吗?
  6. lin-cms-dotnetcore功能模块的设计
  7. 去掉数组左右两边的引号
  8. java中的几个集合类
  9. 微信换头像小程序实现原理及源码
  10. vue中使用vue-quill-editor富文本编辑器
  11. Informix数据库查询表的锁级别
  12. LabVIEW控制高速微快门
  13. Markdownpad2安装注册
  14. 中招报名网站服务器错误,中考报名显示密码错误 中考网上报名说我密码错误怎么办...
  15. 根据年份和月份判断该月的天数,例如,1900年是平年,则2月份有28天,2000年是闰年,则2月份有29天。 闰年的条件:year除以400能整除,或者year除以4能整除,但是不能是100的倍数
  16. 决策树(信息熵、增益率、基尼指数)
  17. 关于 xx客 的词的解释
  18. Java界面布局管理(简单)
  19. 餐饮支付受理为什么一定要找通联收银宝?
  20. Python 遍历获得目录下的所有文件路径

热门文章

  1. 小学奥数的学习路径是什么
  2. Android Surface 系统简单学习
  3. JavaScript计算日期前一天和后一天
  4. 计算机二级c语言程序填空,计算机二级c语言程序填空题.pdf
  5. SpringCloud-10-配置控制台彩色打印、自定义banner
  6. wifislax中的linset软件钓鱼教程
  7. mac启动台图标重置
  8. 外行对程序员的误解到底有多深?来看你有没有中招
  9. 解决android中EditText导致的内存泄漏问题
  10. 奇偶校验器真值表_奇偶校验器