在优酷的几道笔试题
2007-07-03 19:57
246 查看
一、求一个三十二位整数的二进制数中一的个数
int count_ones(unsigned a) { a = (a & 0x55555555) + ((a >> 1) & 0x55555555); a = (a & 0x33333333) + ((a >> 2) & 0x33333333); a = (a & 0x0f0f0f0f) + ((a >> 4) & 0x0f0f0f0f); a = (a & 0x00ff00ff) + ((a >> 8) & 0x00ff00ff); a = (a & 0x0000ffff) + ((a >> 16) & 0x0000ffff); return a; }
二、水仙花数 int a=n%10; int b=n/10%10; int c=n/100; if(a*a*a+b*b*b+c*c*c==n)
三、点和面的关系 法向量是垂直屏幕的法线表示的向量 设平面法向量为{A,B,C},平面与法向量的交点为P0:(x0,y0,z0). 则平面上一点(x,y,z)与(x0,y0,z0)的向量必然与法线垂直。因此得出平面的点法式方程: A(x-X0) + B(y-y0) + C(z-z0) = 0 将判断点坐标代入方程 满足条件 则点在平面上。 另:若方程坐标多项式>0,则在平面正面(法向量方向),反之在背面 注释: 两向量a * b 的长度为: ||a || * ||b|| * sin(thta) //thta为a与b的夹角 这样 A(x-X0) + B(y-y0) + C(z-z0) = 0 a,b垂直 A(x-X0) + B(y-y0) + C(z-z0) > 0 a在b方向 A(x-X0) + B(y-y0) + C(z-z0) < 0 a不在b方向