1、求下面函数的返回值
int func(x)
{
int countx = 0;
while(x)
{
countx++;
x = x&(x-1);
}
return countx;
}
问:假定x是9999,那么返回多少?
答:返回的是8,解题思路是将x转化为二进制,看含有多少个1,则就返回多少。
2、文件中有一组整数,要求排序后输出到另一个文件中
如果数不多的情况下,可以直接将文件中所有整数读到set中,set类型会自动排好序,读完后再将所有整数写到另一个文件中去。
而整数特别多内存又不够的情况下,可以分批读,每次读一部分排好序写到一个小文件中去,直到所有整数都读取完成,这时每个小文件就都是排好序的了,然后将所有小文件中第一个数读出来进行比较,选出最小的放到目标文件中去,然后将该最小的数所在文件的下一个数读取出来进行比较,这样所有小文件都比完之后,目标文件中就是排好序的所有整数了。
思路:这里采用的是大而化小,化整为零的手段。
3、使用递归将两个有序链表合并为一个有序链表
思路:理解递归,并定义好结束的条件
Node * Merge(Node *head1, Node* head2)
{
if (head1 == NULL)
return head2;
if (head2 == NULL)
return head1;
Node