您的位置:首页 > 职场人生

微软笔试面试题集锦

2011-10-13 15:57 218 查看
(一)编程实现两个正整数的除法

编程实现两个正整数的除法,当然不能用除法操作符

想法是这样的:被除数不断减去含除数的最大2^n倍数。例如,200/5,那么以此为200-5*2^5=40 result = 2^5 =32 ,40-5*2^3=0 result=32+2^3 = 40。所以结果为40.

int div(const int x, const int y) {
int left_num = x;
int result = 0;
while (left_num >= y) {
int multi = 1;
while (y * multi <= (left_num >> 1)) {
multi = multi << 1;
}
result += multi;
left_num -= y * multi;
}
return result;
}

问题扩展:

如果需要测试上面这个函数,需要哪些测试用例?

1)正负数的组合

2)除数与被除数大小组合

(二) 一块长方形的蛋糕,其中有一个小长方形的空洞(角度任意)。使用一把直刀,如何一刀将蛋糕切成相等的两份?

  

回答:通过长方形中心的的任意直线都能将长方形等分,所以连接两个长方形的中心点的直线可以等分这个蛋糕。

(三)写程序找出二叉树的深度

一个树的深度等于max(左子树深度,右子树深度)+1。可以使用递归实现。

struct Node {
Node* left;
Node* right;
};

int GetDepth(Node* root) {
if (NULL == root) {
return 0;
}
int left_depth = GetDepth(root->left);
int right_depth = GetDepth(root->right);
return left_depth > right_depth ? left_depth + 1 : right_depth + 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: