1, 假设A上台阶,一次可以跨1层,2层或3层,问A上50层台阶,有多少种走法?
假设A上台阶,一次可以跨1层,2层,3层.. 或m层,问A上n层台阶,有多少种走法?
其中,m和n都是正整数,并且 m <= n, m <= 10, n <= 50
请编程解决这个问题,并详细说明解题思路。
答:到第n层,必然经过第n-1,n-2,……,或者 n-m层。把到第n层的走法记为f(n),可得斐波那契数列如下:f(n)=f(n-1)+…+f(n-m)
2,请设计一套对n个字符进行全排列的算法。
如果对该算法输出全排列顺序分别标记序号,从1到n!
那么,给出low, high,能否不算出所有排列,而直接输出第low个到第high个的排列方式。
请写出示例代码,并详细说明解题思路。
3,一栋楼有N层,要去每一层的人数分别为p[1], p[2], ...,p[n],如果电梯只停1次,问停哪一层,可以让所有人走的楼层最少。
如果走路上一层楼耗费的能量为k1, 走路下一层楼消耗的能量为k2,坐电梯上一层楼消耗的能量为k3,问停哪一层,可以让所有人消耗能量最少。
请编程解决这个问题,并详细说明解题思路。
4,如果你很熟悉STL,请尝试做下面题目:
a,如何将大量有序数据(例如有100万条有序节点的vector),快速添加到map中去
b,一个vector中有100万条数据,请以最高的效率,删除第5,10,15项的内容
5,在云存储计算中心,大量的文件存储在N台服务器组成的集群中,每个文件都有一个独立且唯一的编号(ID),我们根据 ID % N 将文件的实际存储分配到N台服务器中。但是如果有一台服务器宕机,或者需要添加一台服务器时,由于N的变化,会造成大量的访问错误,需要重新对文件的存储进行分配(需要把文件从一台机器复制到另一台机器)。
能不能换一种策略,使得在充分利用每台服务器的存储空间同时,尽可能减少服务器数量的变化对文件存储重分配造成的开销,如果N台服务器的存储空间各不相同,如何调整你的策略。
6,有两个大于1且不相等的自然数。A知道两个数的乘积,B知道两个数的和。
B说:我不知道这两个数是多少,但我确定你也不知道
A看了看乘积说:那现在我就知道这两个数是多少了。
B想了想说:嗯,现在我也知道这两个数是多少了。
请问,这两个数分别是多少。
7,设计一套内存地址描述算法和数据结构,要求如下:
1)内存地址从0开始,到无穷大,初始内存都是未使用。
2)申请内存块算法,输入申请大小,输出申请到的内存的起始地址,并将此块内存标记为已使用,申请内存块时,不能覆盖到已使用的内存块。
3)在可能申请到的内存地址中,必须随机。即如果[0, 0x1000]都是未使用的内存,申请0x100大小的内存,申请到的地址必须是从[0, 0xF00]中随机。
4)如果连续多次进行申请内存操作,会对该段内存产生碎片,申请内存的时候,要尽可能使用中间的碎片进行申请,只有在所有碎片都无法申请的所需大小时,才能向内存最后的无穷大空间中申请内存。
5)不需要释放内存块的功能,在大量碎片(超过2w个)的情况下,申请速度会大大降低(浪费在查询碎片内存块上),请尽量保证最快的申请内存块速度。