2018年程序员考试面试题精选题_第1页
2018年程序员考试面试题精选题_第2页
2018年程序员考试面试题精选题_第3页
2018年程序员考试面试题精选题_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2018 年程序员考试面试题精选题2018 年程序员考试面试题精选题 2018 年程序员考试面试题精选题 -求1+2+.+n 题目:求1+2+门,要求不能使用乘除法、for、while、if 、 else 、 switch 、 case 等关键字以及条件判断语句。 分析:这道题没有多少实际意义,因为在软件开发中不会有这么变态的限制。但这道题却能有效地考查发散思维能力, 而发散思维能力能反映出对编程相关技术理解的深刻程度。通常求1+2+-+n除了用公式n/2之外,无外乎循环和递归两种思路。由于已经明确限制 for 和 while的使用,循环已经不能再用了。同样,递归函数也需要用 if 语句或者条

2、件判断语句来判断是继续递归下去还是终止递归, 但现在题目已经不允许使用这两种语句了。 我们仍然围绕循环做。 循环只是让相同的代码执行n 遍而已, 我们完全可以不用 for 和 while 达到这个效果。比如定义一个类,我们new含有n个这种类型元素的数组,那么该类的构造函数将确定会被调用 n 次。 我们可以将需要执行的代码放到构造函数里。如下代码正是基于这个思路: classTep public: Tep+N;Su+=N; staticvoidResetN=0;Su=0; staticintGetSureturnSu; private: staticintN;staticintSu; intT

3、ep:N=0; intTep:Su=0; intsolution1_Su Tep:Reset; Tep*a=newTepn; deletea; a=0; returnTep:GetSu; 我们同样也可以围绕递归做。 既然不能判断是不是应该终止递归,我们不妨定义两个函数。一个函数充当递归函数的角色,另一个函数处理终止递归的情况, 我们需要做的就是在两个函里二选一。从二选一我们很自然的想到布尔变量,比如 ture 的时候调用第一个函数, false 的时候调用第二个函数。那现在的问题是如和把数值变量 n 转换成布尔值。如果对n 连续做两次反算,即 !n ,那么非零的 n 转换为 true , 0

4、转换为 false 。有了上述分析,我们再来看下面的代 码: classA; A*Array2; classA ublic: virtualintSure turn0; classB:publicA public: virtualintSureturnArray !n->Su+n; intsolution2_Su Aa; Bb; Array0=&a; Arra y1=&b; intvalue=Array1->Su; returnvalue; 这 种 方 法 是 用虚函数来实现函数的选择。当 n 不为零时,执行函数B:Su; 当 n为 0 时,执行 A:Su 。我们也

5、可以直接用函数指针数组,这样可能还 更直接一 些: typedefint; intsolution3_f1 return0; intsolution3_ f2 funf2=solution3_f1,solution3_f2;returni+f!i;另外我们还可以让编译器帮我们来完成类似于递归的运算, 比如如下代码: teplatestructsolution4_Su enuValueN=solution4_Su:N +n; teplate>structsolution4_Su enuValueN=1; solution4 _Su:N 就是 1+2+.+100 的结果。当编译器看到 solution4_Su 时, 就是为模板类solution4_Su 以参数 100生成该类型的代码。 但以 100为 参 数 的 类 型 需 要 得 到 以 99 为 数 的 类 型 , 因 为solution4_Su:N=solut ion4_Su:N+100 。这个过程会递归一直到参数为 1 的类型,由于该类型已经显式定义,编译器无需生成,递归编译到此结束。 由于这个过程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论