名企招聘经典面试编程题集锦[第11-20题]
声明:所有试题均来自网络。解答仅作参考,如对解答有疑问,或者有更好的解法,欢迎留言交流。
11、求1+2+…+n。
要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。
15、从上往下打印二叉树
输入一颗二叉树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入8
/ \
6 10
/ \ / \
5 7 9 11输出8 6 10 5 7 9 11。
18、斐波那契数列题目:定义Fibonacci数列如下:
{ 0 n=0
f(n)= { 1 n=1
{ f(n-1)+f(n-2) n>1输入n,用最快的方法求该数列的第n项。
分析: 由于递归的写法效率太过低下,要求用非递归实现。int g_N = 0; //全局变量,存储n的值void FindSum(int n,int m){int* data = new int[n+1];for (int i=0;i!=n+1;++i)*(data+i)=0;g_N = n;FindSum(n,m,data);delete[] data;g_N = 0;}void FindSum(int n,int m,int* data){if(n<1 || m<1)return;if(m<n)n=m;if(n==m){*(data+n)=1;PrintData(data);}*(data+n)=1;FindSum(n-1,m-n,data);*(data+n)=0;FindSum(n-1,m,data);}void PrintData(int* data){for (int i=1;i<=g_N;++i){if(*(data+i)==1)cout<<i<<" ";}cout<<endl;}