随笔分类 -  常见面试题

一些常见的面试分析
统计给定整数的二进制表示中1的个数
摘要:(1).逐位判断(位运算)Int get_counte(int n){ Intcounter = 0; While(n) { Counter+= n&1; n>>=1;}Return counter;}(2).一个整型不为0,那么二进制表示时,至少包含一位1。如果整数减去1,那么最右边的1变成0,而该1后面的0变成1,其余位不变。将原来的整数和减去1后的数做与运算,从原来最右边的那个1开始所有的,所有位变成0,如:1100&(1100-1=1011)=1000。也就是说整数与该数-1后做与运算,会把最右边一个1变成0。Int get_counter(int n){ 阅读全文

posted @ 2011-08-31 11:07 lambda107 阅读(1329) 评论(0) 推荐(0)

等概率随机函数的实现(对立事件的产生)
摘要:题目: 给定一个随机函数rand(),以p的概率产生0,以1-p的概率产生1,要求设计一个新的随机函数,要求以1/n的概率产生1-n之间的一个数。思路:(1)通过随机函数rand()产生等概率的0和1的新随机函数rand_1()(2)调用k次(k为n的二机制表示的位数)rand_1(),得到一个位长为k的0和1的序列(3)上面产生的k个0/1序列表示1-n之间的数。注意: 如果如果产生的序列大于n,则重新产生直到产生的序列对应的值小于n(1):产生rand_1()int rand_1(){ int a = rand(); int b = rand(); if (a == 0 && 阅读全文

posted @ 2011-08-31 11:04 lambda107 阅读(523) 评论(0) 推荐(0)

导航