2019年程序员考试面试题精选题_第1页
2019年程序员考试面试题精选题_第2页
2019年程序员考试面试题精选题_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

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

2、现在题目已经不允许使用这两种语句了。我们仍然围绕循环做文章。循环仅仅让相同的代码执行n 遍而已,我们完全能够不用for 和 while 达到这个效果。比如定义一个类,我们new一含有 n 个这种类型元素的数组,那么该类的构造函数将确定会被调用 n 次。我们能够将需要执行的代码放到构造函数里。如下代码正是基于这个思路:class Temppublic :Temp() + N; Sum += N; static void Reset() N = 0; Sum = 0; static int GetSum() return Sum; private:static int N;static int S

3、um;int Temp : N = 0;int Temp : Sum = 0;int solution1_Sum(int n)Temp: Reset();Temp *a = new Tempn;delete a;a = 0;return Temp : GetSum();我们同样也能够围绕递归做文章。既然不能判断是不是应该终止递归,我们不妨定义两个函数。一个函数充当递归函数的角色,另一个函数处理终止递归的情况,我们需要做的就是在两个函数里二选一。从二选一我们很自然的想到布尔变量,比如ture(1)的时候调用第一个函数,false(0) 的时候调用第二个函数。那现在的问题是如和把数值变量 n 转换

4、成布尔值。如果对 n 连续做两次反运算,即 !n ,那么非零的 n 转换为 true ,0 转换为 false 。有了上述分析,我们再来看下面的代码:class A;A* Array2;class Apublic :virtual int Sum (int n) return 0; ;class B : public Apublic :virtual int Sum (int n) return Array!n->Sum(n-1)+n; ;int solution2_Sum(int n)A a;B b;Array0 = &a;Array1 = &b;int value =

5、 Array1->Sum(n);return value;这种方法是用虚函数来实现函数的选择。当n 不为零时,执行函数B:Sum;当 n 为 0 时,执行 A: Sum。我们也能够直接用函数指针数组,这样可能还更直接一些:typedef int (*fun)(int);int solution3_f1(int i)return 0;int solution3_f2(int i)fun f2=solution3_f1, solution3_f2;return i+f!i(i-1);另外我们还能够让编译器帮我们来完成类似于递归的运算,比如如下代码:template struct solution4_Sumenum Value N = solution4_Sum: N + n;templateenum Value N = 1;solution4_Sum : N就是 1+2+.+100 的结果。当编译器看到 solution4_Sum 时,就是为模板类 solution4_Sum 以参数 100 生成该类型的代码。但以 100 为参数的类型需要得到以 99 为参数的类型,因为 solution4_Sum : N=solution4_Sum : N+100。这个过程会递归一直到参数为 1 的类型,因为该类型已经显式定义,编译器无需生成,递归编译到此结

温馨提示

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

评论

0/150

提交评论