1. 给一条长度为1的线段,在线段上选取两个点将其分成3段,求这三段能拼成三角形的概率?
根据三角形两边之和大于第三遍,两边之差小于第三边,假设其中一段距离左端点的距离为x,另一段为y,令y>x,那么三段的长度分别为x, y-x, 1-y
根据两边之和大于第三边有:y > 1/2 , y-x < 1/2 , x < 1/2, y-x > 0,这几个条件可以确定一个三角形,面积是1/8,即为所求概率。
2. 将54张扑克牌均分成3份,其中大小王在一份里面的概率是多少?
首先将54张牌均分成3份的分发有M = C(54, 18)*C(36, 18)*C(18, 18)
大小王在一张牌中的分发有N = C(3, 1)*C(52, 16)*C(36, 18)*C(18, 18)
那么N / M即为所求。
3. 有两个盒子,50个红球和50个黑球,现在设计一种分配方案,使得随机选择选择一个盒子,然后随机选择一个球,这个球是红球的最大概率是多少?
分配方案:将一个盒子里放一个红球,然后其他所有球都放到另一个盒子里面。
概率:1/2 * 1 + 1/2 * 49/99 = 74.7%
4. 将一个数组均匀打乱的算法?
令当前数组长度为n,在里面随机选择一个数,将其与最后一个数交换,然后再对前n-1个数做相同操作。
5. 利用异或进行两数交换
a = a^b
b = a^b
a = a^b
分析:先令a=a^b,那么b=a^b=(a^b)^b=a,a=a^b=(a^b)^a=b
6. 不用比较符求出a,b的最大值
max=(abs(a+b)+abs(a-b))/2
分析:if a > b 有 max = (a+b+a-b)/2 = a
if a < b 有 max = (a+b+b-a)/2 = b
7. 不用加减乘除运算符求两个书的和
while(b) {
sum = a^b;
carry = (a&b)<<1;
a = sum;
b = carry;
}
return a;
分析:a^b的意思是a和b在二进制下相加,但是不考虑进位,a&b在二进制下为1的位表示相加需要进位的地方,所以需要向左移一位,然后只要进位不为0,就需要再次和上一次不考虑进位的和用同样的方法进行相加。
8. X>=5,X和X+2为素数,证明X是6的倍数
首先任意三个连续的自然数都可以被3整除。
证明:对于n-1, n, n+1
假设n%3=0
假设n%3=1有(n-1)%3=0
假设n%3=2有(n+1)%3=0
得证。
因此由于X和X+2都是素数,那么X一定是3的倍数,由于X和X+2都是素数那么它们一定是奇数所以X+1一定是偶数,X+1含有因子2和因子3所以一定能被6整除。
9. 随即洗牌算法及其证明
在1~n随机选一个数与a[n]交换,再从1~n-1随机选一个数和a[n-1]交换,以此类推。这样做可以做到均匀洗牌,也就是1~n的全排列可以等概率的均匀得到。
证明:首先从n个数中随机选共有n种可能情况,然后在n-1个数中随机选共有n-1种可能情况,那么可以获得的情况有n*(n-1)*(n-2)*...*1种,相当于全排列,也就是全排列中的所有情况都可以等概率的得到。
原文:http://www.cnblogs.com/wwwsealss/p/5275689.html