BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #34374同步于 2009/5/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

[分享] 有道面试题

Jarod
2009/5/11镜像同步35 回复
第一题,一个数拆成连续几个自然数之和,给出所有拆法 第二题,两个有序数组,长度分别为N,M,相互之间两 两相加,得到N*M的数组,求其中第K大的那个数 转自 winton
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
wks机器人#1 · 2009/5/11
1: def chai(n): for low in range(n+1): for high in range (low,n+1): if (low+high)*(high-low+1) == n: print range(low,high+1) 如果需要优化效率,内层循环可以用二分查找。 2: 给两个数组建“堆”,每次从堆顶取两个相乘 (不太好的方法,还是要O(N*M),如果k很大)
Wavestone机器人#2 · 2009/5/11
其实小包弄了第一题,jarod弄了第二题,尤其是第二题...... 【 在 wks 的大作中提到: 】 : 1: : def chai(n): : for low in range(n+1): : ...................
Jarod机器人#3 · 2009/5/11
小包有弄第一题么?? 【 在 Wavestone 的大作中提到: 】 : 其实小包弄了第一题,jarod弄了第二题,尤其是第二题......
Jarod机器人#4 · 2009/5/11
第二题怎么与乘相关了?? 【 在 wks 的大作中提到: 】 : 1: : def chai(n): : for low in range(n+1): : ...................
wks机器人#5 · 2009/5/11
嗯,应该是相加。
coolwc机器人#6 · 2009/5/11
第一题多简单 简单直接的办法 for(x:N) test n-sum(x)/x==0 zhuangB用的办法 producer/consumer模型 先把{n}放进工作队列 工作线程取出n 然后把{1,n-1} {2,n-2} ....{n/2-1,n/2+1}放进去 如果{x,n-x}是连续数就放进结果队列 小于0的就扔掉 然后工作线程继续取出 {x,n-x} 把n-x换算成 {x+1,n-x-(x+1)} 依次操作。。。。结束条件是工作队列为空 应用并行计算可在单位时间里计算任意大小数 【 在 Jarod (3线操作失败男 | 天天被雷劈) 的大作中提到: 】 : 小包有弄第一题么??
Jarod机器人#7 · 2009/5/11
...没懂你第二题的思路.... 【 在 wks 的大作中提到: 】 : 嗯,应该是相加。
Jarod机器人#8 · 2009/5/11
...用毛的除法 【 在 coolwc 的大作中提到: 】 : 第一题多简单 : 简单直接的办法 for(x:N) test n-sum(x)/x==0 : zhuangB用的办法 producer/consumer模型 : ...................
sunnyboy机器人#9 · 2009/5/11
【 在 Jarod 的大作中提到: 】 : 第一题,一个数拆成连续几个自然数之和,给出所有拆法 : 第二题,两个有序数组,长度分别为N,M,相互之间两 两相加,得到N*M的数组,求其中第K大的那个数 : 转自 winton 第一题,第一届百度之星2005年初赛第一题,同时被编程之美收录 下面是我的代码,并不是最高效的 #include<iostream> #include<cmath> using namespace std; //2n=(2b+l-1)*l 用的就是这条公式,如果对2n做因式分解之后枚举所有因子的话,应该更加高效,注意的是 l<2b+l-1 int main(void) { int n,l,b,k; scanf("%d",&n); if((n&(n-1))==0) printf("NONE\n"); else{ n*=2; for(l=(int)sqrt((double)n);l>1;l--){ if(n%l!=0) continue; k=n/l; if(k<=l||((k-l)&1)==0) continue; b=(k-l+1)>>1; for(int i=0;i<l-1;i++) printf("%d ",i+b); printf("%d\n",b+l-1); } } system("pause"); return 0; }