算法面试题

来源:互联网 发布:usb3.0端口电压 编辑:程序博客网 时间:2024/06/06 01:10

n条直线最多能将一个平面分成多少部分?
num[n] = num[n - 1] + n 思路:第n条直线总能和前⾯面n-1条直线形成n-1个交点,将第n条直线 分成n份,每一份会多分出一个平⾯面;num[n] = 1 + n*(n+1)/2;

两个机器人,初始时位于数轴上的不同位置。给这两个机器人输入一段相同 的程序,使得这两个机 器人保证可以相遇。程序只能包含“左移 n 个单位”、“右移 n 个单位”,条件判断语句 If,循环语句 while, 以及两个返回 Boolean 值的 函数“在自己的起点处”和“在对方的起点处”。你不能使用其它的变量和 计数器,请写出该程序
两个机器人,初始时位于数轴上的不同位置。给这两个机器人输入一段相同 的程序,使得这两个机 器人保证可以相遇。程序只能包含“左移 n 个单位”、“右移 n 个单位”,条件判断语句 If,循环语句 while, 以及两个返回 Boolean 值的 函数“在自己的起点处”和“在对方的起点处”。你不能使用其它的变量和 计数器,请写出该程序

有 n 个人互相比赛(n已知), 一个人输掉 4 次就出局(不能继续比赛),赢 7 次通过(可以继续比赛), 问最多通过人数?
方程法,无人出局条件下,每个人最多送3次助攻,设a个胜者,b个败者
7a <= 3n + b; a + b = n;

两个软硬程度一样的鸡蛋,它们在某一层摔下会碎,有个100层的建筑,要求最多用两个鸡蛋确 定鸡蛋安全下落的临界位置,给出临界位置?如果是n层楼,m个鸡蛋,请给出确定临界位置的算法
现在推广成n层楼,m个鸡蛋:
还是动态规划。假设f[n,m]表示n层楼、m个鸡蛋时找到摔鸡蛋不碎的最少判断次数。则一个鸡蛋从第i层扔下,如果碎了,还剩m-1个鸡蛋,为确定下面楼层中的安全位置,还需要f[i-1,m-1]次(子问题);不碎的话,上面还有n-i层,还需要f[n-i,m]次(还可以继续丢,子问题,实体n层楼的上n-i层需要的最少判断次数和实体n-i层楼需要的最少判断次数其实是一样的)。

状态转移方程:f[n,m] = min{ 1 + max(f[i - 1 ,m - 1 ], f[n - i,m]) | i= 1 ..n }
初始条件:f[i, 0 ] = 0 (或f[i, 1 ] = i)

n个人,只有1个人是明星,明星所有人都认识,但明星不认识其他任何人,如何找到该明星?如果n很大很大,如果改进你的算法?
线性扫描一遍,两两比较,每次比较都会排出一个人:若a认识b,则a一定不是明星;若a不认 识b,则b一定不是明星;

给50个硬币,面值可以不同,排成一排,两个人轮流取,只能从两端取,先取的人如何保证取到的币值大于等于另一个人
看奇数位的数的和以及偶数位的数的和哪个大,若奇数位的大选第一个,否则选最后面的(这里假设奇数位和偶数位的和不同)若出现相同,可以采用动态规划的思路来做

一个绳子从一头开始烧是1小时,要求想办法测出45分钟。
分成1/4 和3/4对折两下下

100个囚犯从前往后坐成一列。坐在最后面的那个囚犯能够看到其余99个囚犯,坐在最前面的 那个囚犯啥也看不见。看守给每个囚犯戴上一顶黑色的或者白色的帽子。然后,看守会从后往前依 次叫这些囚犯猜测自己头顶上的帽子的颜色。如果哪个囚犯猜对了,他就自由了。坐在前面的每一 个囚犯都可以听到后面的囚犯的猜测。如果这100个囚犯事先可以商量好一种策略,那么最理想的策 略是什么?
100个囚犯从前往后坐成一列。坐在最后面的那个囚犯能够看到其余99个囚犯,坐在最前面的那个囚犯啥也看不见。看守给每个囚犯戴上一顶黑色的或者白色的帽子。然后,看守会从后往前依次叫这些囚犯猜测自己头顶上的帽子的颜色。如果哪个囚犯猜对了,他就自由了。坐在前面的每一个囚犯都可以听到后面的囚犯的猜测。如果这100个囚犯事先可以商量好一种策略,那么最理想的策略是什么?
囚犯们可以乱猜一通,最坏情况下所有人都猜错,平均下来则会有50个人猜对。这个题有趣的地方就在于,100个囚犯事先可以商量一种策略,也就是说坐在后面的囚犯可以用他的猜测给坐在前面的囚犯透露一些信息。很显然,坐在最后面的囚犯是不可能保证自己猜对的,他猜黑猜白都只有一半的几率猜对,似乎没什么区别;但囚犯可以事先约定好一种暗号,即最后一个囚犯猜黑表示什么意思,猜白表示什么意思。比如,最后一个囚犯可以猜测和他前面的囚犯的帽子一样的颜色,这就相当于用他的猜测告诉了他前面那个囚犯该猜什么,于是坐倒数第二的囚犯可以保证被释放;此时,坐在倒数第三个位置上的囚犯面对与刚才坐最后的囚犯相同的处境,他同样可以用他的猜测提示出他前面那个人的帽子颜色。这样下去,可以保证至少50个人猜对,平均情况则有75个人猜对。这不是最佳的策略。
不可思议的是,最佳策略可以保证,除了坐在最后面的囚犯以外,其余99个囚犯都能猜对。你能想出这样的策略是什么吗?继续看下去前不妨先想一下。
前面那种策略的问题在于,坐在最后面的那个人透露出的信息不多。他完全可以透露出与全局相关的一些信息,因此以后所有的人都可以用这条信息。比如,他可以数一数他前面99个人一共有多少顶白帽子,并约定他猜“黑”表示他前面共有偶数顶白帽,他猜“白”表示他前面共有奇数顶白帽。坐倒数第二的那个人也数一数他前面98个人的白帽子个数:如果他数出来的个数与先前透露出的个数一奇一偶,则他自己肯定戴的是白帽子;如果他数出来的和先前透露的结果奇偶性相同,则他自己戴的肯定是黑帽子。这样,坐倒数第二的保证可以猜对了。那接下来咋办呢?不要忘了,其他囚犯能听到刚才那人猜的是什么,并且知道他的猜测保证是对的。这相当于每个人不仅能看到坐他前面的所有人的帽子颜色,还知道他背后那些人的帽子颜色,结合最初的那个奇偶性信息,接下来的每一个人都可以猜出自己脑袋上的帽子颜色。这样下去,至少99个囚犯可以保证被释放。这种策略显然是最佳的,不可能再有什么策略能保证所有人都被释放,因为至少坐最后的那个人不可能保证自己猜对。

如何等概率地从n个数中随机抽出m个数?上题中如果n的大小不确定(可以认为是⼀个数据流),如何做?
如何等概率地从n个数中随机抽出m个数?上题中如果n的大小不确定(可以认为是⼀个数据流),如何做?

A,B,C三人轮流扔硬币,第一个扔到正面的人算赢,问三个人赢的概率分别为多大?
P(B) = 1/2*P(A); P(C) = 1/4 * P(A); P(A) + P(B) + P(C) = 1;
得P(A) = 4/7, P(B) = 2/7, P(C) = 1/7

0 0