题目来源:http://www.itmian4.com/forum.php?mod=viewthread&tid=3427&extra=&page=1
一,1, B; 2, A; 3,D; 4,D; 5,c; 6,A; 7,B; 8,B; 9,C; 10, B; 11, C; 12, 不会 13, A; 14,D; 15,B;
16, D; 17,D; 18,C; 19,B; 20,A;
二,多选:
1,ACD; 2,AC; 3,BC; 4,BD; 5,BCD; 6,ABC; 7,ABCD; 8,AD; 9,BCD;10ABC
三,1. break; cur_node_ptr=cur_node_ptr->next; last_tail=new_node_ptr; delete temp_ptr;
2. pa=*LA; ; *pb==*pa; pre=pa;
3. next[i]=i;
四.此题一开始想到的是分行祸首列进行二分,复杂度为O(mlgn),在群里兄弟的提示下,知道是offer上的题目,看了半天终于懂了,贴代码如下:
bool search(int *arr,int m,int n,int key)
{
assert(arr!=NULL && m!=0 && n!=0);
int row=0;
int column=n-1;
bool bResult=false;
while(row<=n-1&&column>=0)
{
if(arr[row*n+column]==key)
{
bResult=true;
break;
}else if(arr[row*n+column]>key)
{
column--;
}
else
row++;
}
return bResult;
return true;
}
五 2
int calc_utf8_count(unsigned char* data_ptr,unsigned int data_len )
{
assert(data_ptr!=NULL && data_len>0);
int count=0;
for(int i=0;i<data_len;++i)
{
if(!(data_ptr[i]&0x80))
{
count++;
continue;
}
else if (data_len-1-i>=1 && ((data_ptr[i]>>7)&(data_ptr[i]>>6)&( (data_ptr[i]>>5)^0x01 )&0x01) && ( (data_ptr[i+1]>>7) & (data_ptr[i+1]>>6^0x01) ))
{
count++;
i=i+1;
continue;
}
else if(data_len-1-i>=2 &&( (data_ptr[i]>>7)&(data_ptr[i]>>6)& (data_ptr[i]>>5)& 0x01 &data_ptr[i]>>4^0x01 ) && ( (data_ptr[i+1]>>7) & (data_ptr[i+1]>>6^0x01) ) && ((data_ptr[i+2]>>7) & (data_ptr[i+2]>>6^0x01) ) )
{
count++;
i=i+2;
continue;
}
else
{
count=-1;//不是utf8字节流
break;
}
}
return count;
}
多选:
ABCD; BC; BD; ABC; AC;
主观题:
1. 不会
2. 16;
12;
12;
8;