一道人人的笔试题
2012-11-14 22:02
239 查看
2012.10.12下午在交大参加的笔试,记得其中一道题大概是:
1)计算f(8,8)的值
2)怎么改进函数,降低时间复杂度?
当时,第一问,直接一步步迭代算,算了半天,没算出来,将中间过程写出来了,第二问,当时想的是应该是将递归改为非递归,但不知道怎么改,没写!
其实这不是在考编程,而是在考数学,再细说,就是在考杨辉三角。以f(3,3)为例,如下图,其展开系数就是杨辉三角的一部分。
对于f(m,n)=C(m+n,n)*f(0,0); C(m+n,n)为组合数。则
1)f(8,8)=C(16,8)*f(0,0)=C(16,8)=12870;
2) 改进思路:将递归改为计算组合数
组合数的计算参考(转的)计算组合数——整数拆分,笔试题--计算组合数。
int f(int x,int y) { if(x<0||y<0) return 0; if(x==0||y==0) return 1; return f(x-1,y)+f(x,y-1); }
1)计算f(8,8)的值
2)怎么改进函数,降低时间复杂度?
当时,第一问,直接一步步迭代算,算了半天,没算出来,将中间过程写出来了,第二问,当时想的是应该是将递归改为非递归,但不知道怎么改,没写!
其实这不是在考编程,而是在考数学,再细说,就是在考杨辉三角。以f(3,3)为例,如下图,其展开系数就是杨辉三角的一部分。
对于f(m,n)=C(m+n,n)*f(0,0); C(m+n,n)为组合数。则
1)f(8,8)=C(16,8)*f(0,0)=C(16,8)=12870;
2) 改进思路:将递归改为计算组合数
int Combination(int all,int select){ if(all<=0||select<0||all<select) exit(1); if(select==0||select==all) return 1; if(select==1||select==all-1) return all; return Combination(all-1,select-1)+Combination(all-1,select);//帕斯卡恒等式 } int f2(int x,int y) { if(x<0||y<0) return 0; if(x==0||y==0) return 1; return Combination(x+y,y); }
组合数的计算参考(转的)计算组合数——整数拆分,笔试题--计算组合数。
相关文章推荐
- 据说是2012年10月人人网校招的一道笔试题
- 阿里巴巴2014校园招聘研发笔试一道JAVA附加题分析
- 关于js字符串替换的一道笔试题目
- 由一道笔试题谈C++中const的使用及const_cast转换
- 【笔试or面试】人人2014校园招聘笔试题(广州站)
- 百度一道笔试题目的答案
- assert宏的实现(一道笔试题)
- 分享一道关于素数的笔试题
- 一道某高大上互联网公司的笔试题分享
- 一道灵活的css笔试题
- OpenJDK源码研究笔记(二)-Comparable和Comparator2个接口的作用和区别(一道经典的Java笔试面试题)
- OpenJDK源码研究笔记(五)-缓存Integer等类型的频繁使用的数据和对象,大幅度提升性能(一道经典的Java笔试题)
- 网易的一道笔试题
- 一道菜鸟笔试题
- 一道笔试题目
- 网易的一道笔试题的参考解法---关于广告牌投放问题
- 一道求职笔试题:c#算法题
- 猜数字游戏(一道java笔试题)
- GOOGLE的一道笔试题—求给定连通无环无向图可以生成的最小高度树
- 一道C++的笔试题