笔记IT面试Word文件下载.docx

上传人:b****3 文档编号:15702290 上传时间:2022-11-15 格式:DOCX 页数:32 大小:100.99KB
下载 相关 举报
笔记IT面试Word文件下载.docx_第1页
第1页 / 共32页
笔记IT面试Word文件下载.docx_第2页
第2页 / 共32页
笔记IT面试Word文件下载.docx_第3页
第3页 / 共32页
笔记IT面试Word文件下载.docx_第4页
第4页 / 共32页
笔记IT面试Word文件下载.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

笔记IT面试Word文件下载.docx

《笔记IT面试Word文件下载.docx》由会员分享,可在线阅读,更多相关《笔记IT面试Word文件下载.docx(32页珍藏版)》请在冰豆网上搜索。

笔记IT面试Word文件下载.docx

//这个要注意

a[i]=a[a[i]];

a[k]=-1;

}

if(a[i]==i)

{a[i]=-1;

}

}

returnfalse;

2平面上N个点,没两个点都确定一条直线,求出斜率最大的那条直线所通过的两个点

1.先把N个点按x排序。

2.斜率k最大值为max(斜率(point[i],point[i+1])) 

 

0<

=i<

n-2。

复杂度Nlog(N)。

以3个点为例,按照x排序后为ABC,假如3点共线,则斜率一样,假如不共线,则可以证明AB或BC中,一定有一个点的斜率大于AC,一个点的斜率小于AC。

3strcpy只能处理字符串;

如果拷贝带有特殊字符的串,就只能用memcpy或memmove。

memcpy和memmove功能基本上差不多,但是当源串和目标串有Overlap时,memmove可以正确处理,memcpy则不行

Memset把buffer所指内存区域的前count个字节设置成字符c。

说明:

返回指向buffer的指针。

用来对一段内存空间全部设置为某个字符。

void*memcpy(void*dst,constvoid*src,size_tcount);

void*memmove(void*dst,constvoid*src,size_tcount);

externvoid*memset(void*buffer,intc,intcount);

void*__cdeclmemcpy(void*dst,constvoid*src,size_tcount)

{

void*ret=dst;

while(count--)

*(char*)dst=*(char*)src;

dst=(char*)dst+1;

src=(char*)src+1;

}

return(ret);

// 

十进制转换为二进制,十进制数的每1bit转换为二进制的1位数字 

char 

*int_to_bin(unsigned 

long 

data) 

int 

bit_num 

sizeof(unsigned 

long) 

8;

*p_bin 

new 

char[bit_num+1];

p_bin[bit_num] 

'

\0'

;

for 

(unsigned 

0;

<

bit_num;

++i) 

p_bin[i] 

data 

>

(bit_num-1);

if 

(p_bin[i] 

== 

0) 

0'

else 

1) 

1'

a'

return 

p_bin;

十进制转换为十六进制,十进制数的每4bit转换为十六进制的1位数字 

*int_to_hex(unsigned 

*p_hex 

char[sizeof(unsigned 

long)*8/4+3];

p_hex[0] 

p_hex[1] 

x'

p_hex[bit_num/4+2] 

*p_tmp 

p_hex 

2;

bit_num/4;

p_tmp[i] 

(4*i) 

(bit_num-4);

(p_tmp[i] 

9) 

+= 

if(p_tmp[i] 

10 

15) 

A'

p_hex;

//十进制转换为二进制,十进制数的每1bit转换为二进制的1位数字

char*int_to_bin(unsignedlongdata)

intbit_num=sizeof(unsignedlong)*8;

char*p_bin=newchar[bit_num+1];

p_bin[bit_num]='

for(unsignedinti=0;

i<

bit_num;

++i)

{

p_bin[i]=data<

i>

(bit_num-1);

if(p_bin[i]==0)

p_bin[i]='

elseif(p_bin[i]==1)

else

returnp_bin;

//十进制转换为十六进制,十进制数的每4bit转换为十六进制的1位数字

char*int_to_hex(unsignedlongdata)

char*p_hex=newchar[sizeof(unsignedlong)*8/4+3];

p_hex[0]='

p_hex[1]='

p_hex[bit_num/4+2]='

char*p_tmp=p_hex+2;

bit_num/4;

p_tmp[i]=data<

(4*i)>

(bit_num-4);

if(p_tmp[i]>

=0&

p_tmp[i]<

=9)

p_tmp[i]+='

elseif(p_tmp[i]>

=10&

=15)

p_tmp[i]=p_tmp[i]-10+'

returnp_hex;

最长不降序子序列

//result存储最长单调递增子序列的长度,minInMax存储长度为i的最长递增子序列中的末尾元素中的最小值

voidlis2(vector<

int>

&

array,vector<

result)

vector<

minInMax(array.size());

inti,low,high,mid;

result[0]=1;

minInMax[result[0]]=array[0];

for(i=1;

array.size();

++i)

if(array[i]>

minInMax[result[i-1]])//当前元素值大于array[0·

·

i-1]序列中最长递增子序列中的最大值的最小值

{

result[i]=result[i-1]+1;

minInMax[result[i]]=array[i];

}else

result[i]=result[i-1];

low=0;

high=result[i-1];

mid=(low+high)/2;

while(low<

=high)//由于minInMax是递增的,所以使用二分查找确定array[i]应该放在哪个位置上

{

if(array[i]>

minInMax[mid])

{

low=mid+1;

}else{

high=mid-1;

}

mid=(low+high)/2;

}

minInMax[low+1]=array[i];

整数的素数和分解问题

对于一个给定的整数,输出所有这种素数的和分解式,对于同构的分解只输出一次(比如5只有一个分解2+3,而3+2是2+3的同构分解式)。

example:

对于整数8,可以作为如下三种分解:

(1)8=2+2+2+2

(2)8=2+3+3

(3)8=3+5

思路:

f(N,array)=f(N-array[i],array),保存结果,array是保存里面元素值,即所有素数,如果素数只能唯一使用一次,那么就建立对应的一个bool数组即可,每使用一次就标记为true,然后递归函数之后需要重新置为false,对于本题不需要如此,但是需要将保存结果的数组除去当前尝试的素数。

代码不难写出:

/*

*Copyright(c)2011alexingcool.AllRightsReserved.

*/

vector<

result;

prvec;

voidoutputResult(intN,vector<

prime,vector<

result)

if(N<

0)

return;

if(N==0){

copy(result.begin(),result.end(),ostream_iterator<

(cout,"

"

));

cout<

endl;

for(inti=0;

prime.size();

i++){

//为提高效率,可以在此做个判定条件,尽快返回

if(N-prime[i]<

break;

result

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1