摘要: 這段時(shí)間掃了C++Primer,自己覺(jué)得比較有用的tips,僅作為自己參考... 1.如果要在多個(gè)變量中使用一個(gè)const變量,可以在一個(gè)頭文件中定義,然后再其他文件中include<> 或者可以在c++的源文件中定義,然后才其他源文件中extern 2.標(biāo)準(zhǔn)頭文件用#inclue<> &nb...
閱讀全文
題目:有一個(gè)鏈表L,其每個(gè)節(jié)點(diǎn)有2個(gè)指針,一個(gè)指針next指向鏈表的下個(gè)節(jié)點(diǎn),另一個(gè)random隨機(jī)指向鏈表中的任一個(gè)節(jié)點(diǎn),可能是自己或者為空,寫一個(gè)程序,要求復(fù)制這個(gè)鏈表的結(jié)構(gòu)并分析其復(fù)雜性
解決方法一:
O(n)的復(fù)雜度,掃面兩邊即可。

圖【1】
圖【1】是需要復(fù)制的鏈表

圖【2】
如圖【2】所示,ABCD是原來(lái)的鏈表,A’B’C’D’是復(fù)制的鏈表,第一遍掃描順序復(fù)制next指針,把ABCD的next分別指向A’B’C’D’,將A’的next指針指向B,B’的next指針指向C,依次類推
復(fù)制random指針: A’->random=A->random->next
恢復(fù):A->next=A’->next;A’->next=A’->next->next;
解決方法二:
也是O(n)的時(shí)間復(fù)雜度。。。

圖【3】
如圖【3】,第一次遍歷將要復(fù)制的鏈表A’ B’ C’ D’插入員鏈表中,然后再一次遍歷復(fù)制random指針:A->next->random=A->random->next;
恢復(fù)很簡(jiǎn)單:A->next=A->next->next;A’-next=A’->next->next;
轉(zhuǎn)載請(qǐng)注明出處。
又去微軟面試了,面試的技術(shù)支持…
沒(méi)算好時(shí)間,結(jié)果早到了一個(gè)多小時(shí)…2點(diǎn)左右HR把我領(lǐng)到二樓的一個(gè)房間里,等了一會(huì)兒,面試官來(lái)了。第一個(gè)面試官主要問(wèn)的是項(xiàng)目和C語(yǔ)言的理解程度,問(wèn)的很細(xì),而且一個(gè)接一個(gè),速度很快,以致與我現(xiàn)在基本忘記問(wèn)的什么了,只記得問(wèn)了調(diào)用一個(gè)函數(shù)的時(shí)候參數(shù)是怎么傳的,函數(shù)調(diào)用時(shí)參數(shù)壓入堆棧的順序(回去看了<C專家編程>,里面有講到,真是書到用時(shí)方恨少,平時(shí)真的看的書太少了),還有一些位圖的結(jié)構(gòu)是什么,我說(shuō)是文件頭然后是一堆像素,然后又問(wèn)文件頭由哪幾個(gè)部分組成,這個(gè)真的不知道了。總之好像是想到什么問(wèn)什么,還問(wèn)了些匯編的東西,都是很基礎(chǔ)的,大概面了30分鐘吧結(jié)束了,然后繼續(xù)在房間里等。已經(jīng)在那里工作的學(xué)長(zhǎng)汪愈舟還過(guò)來(lái)給我加了下油。
然后又進(jìn)來(lái)一個(gè)面試官,先聊了下,然后讓我寫100!,結(jié)果我寫了標(biāo)準(zhǔn)的高精度,寫了三頁(yè)紙,面試官很驚訝:要寫那么長(zhǎng)么,回來(lái)的時(shí)候天哥說(shuō)他10行搞定,說(shuō)是高精乘低精…悲催,然后也問(wèn)了很多的問(wèn)題,主要是關(guān)于windows的,usermode和kernermode的區(qū)別,函數(shù)a調(diào)用函數(shù)b在堆棧上的實(shí)現(xiàn),這些基本回答了。兩個(gè)同樣性能的計(jì)算機(jī),為什么一臺(tái)機(jī)器打開(kāi)word較快一臺(tái)較慢,windows的基本輸入輸出方式..這兩個(gè)問(wèn)題杯具了。最后問(wèn)了下匯編的東西,問(wèn)我8086的匯編EAX,EBX,很基礎(chǔ)的。由于課堂上講的都是AX,BX結(jié)果比較杯具,面試官提醒說(shuō)EAX,EBX是32位機(jī)的寄存器,AX,BX是16位機(jī)的寄存器。。。面試官面完大概4點(diǎn)多。
等了會(huì),又進(jìn)來(lái)一個(gè)面試官,這個(gè)面試官感覺(jué)比較和善,沒(méi)有很多技術(shù)性的問(wèn)題,先讓我寫了個(gè)快排,以為之前有看過(guò),很快就解決了。然后聊了下比賽啊,項(xiàng)目什么的,然后問(wèn)我有什么要問(wèn)的.想了一會(huì),就問(wèn)了下是否需要實(shí)習(xí)什么的,基本上結(jié)束了。
希望不要又杯具的被默拒啊..沒(méi)想到微軟這么快就叫我去面試..。
God close a door ,He sometimes opens another…I hope it is true.
2011.3.10
人生的第二次面試..上海旭剛市場(chǎng)研究有限公司..just for practice
上海市南京西路中欣大廈…進(jìn)去hr先給了一個(gè)張筆試題…
1.數(shù)字1,2,3,4,5,6,7,8,9,10,12,13,14,……10000遺漏了一個(gè)數(shù)字,用簡(jiǎn)便快速的方法找出這個(gè)數(shù)字,例子中是11。
我寫了二分查找算法,假設(shè)了這些數(shù)是存在連續(xù)的數(shù)組里面的..
void Find_lost_number()
{
int left=1,right=10000;
int mid;
int lost_number;
while(left<right)
{
mid=(left+right)/2;
if(arr[mid]!=arr[mid-1]+1)
{
lost_number=arr[mid-1]+1;
break;
}
else if(arr[mid]!=arr[mid+1]-1)
{
lost_number=arr[mid+1]-1;
break;
}
if(arr[mid]<mid)
right=mid;
else
left=mid;
}
}
后來(lái)回來(lái)請(qǐng)教某牛,某牛居然說(shuō)小學(xué)數(shù)學(xué)題,把所有數(shù)加起來(lái)比較就行了,想想真是……原來(lái)這么簡(jiǎn)單啊,汗……….
2.給一個(gè)數(shù)組找出最小值的下標(biāo)
水啊,好像線性掃描就可以了..
3.你有9個(gè)西服牌子,有兩百個(gè)人,20-29的男性50人,20-29的女性50人,30-39的男性50人,30-39的女性人數(shù)50人,每個(gè)人隨機(jī)選4個(gè)牌子,問(wèn)如何隨機(jī)分配,使不同年齡段不同性別的人得到的西服牌子盡量相同。
這是什么神馬題目,完全沒(méi)思路啊,隨便寫寫交了..
等了一會(huì)兒,去面試了…沒(méi)想到那么輕松,感覺(jué)就是隨便聊了一會(huì),有沒(méi)在實(shí)習(xí)什么的,要不要留上海之類的,工作有什么打算,還問(wèn)了下薪資期望,這個(gè)不是應(yīng)該最后要錄取的時(shí)候問(wèn)嗎…隨便說(shuō)了個(gè)六七千,…..然后還留了個(gè)任務(wù),說(shuō)完成了再聊,好像是轉(zhuǎn)換數(shù)據(jù),要我用excel和SPSS都做一遍然后寫個(gè)報(bào)告…..
That’s all for today 2011.3.4
電腦中的圖像類型分為兩大類,一類稱為點(diǎn)陣圖(位圖),一類稱為矢量圖。
點(diǎn)陣圖顧名思義就是由點(diǎn)構(gòu)成的,如同用馬賽克去拼貼圖案一樣,每個(gè)馬賽克就是一個(gè)點(diǎn),若干個(gè)點(diǎn)以矩陣排列成圖案。
數(shù)碼相機(jī)拍攝的照片、掃描儀掃描的稿件以及絕大多數(shù)的圖片都屬于點(diǎn)陣圖,如一個(gè)典型的點(diǎn)陣圖:
把這幅圖片調(diào)入Photoshop,使用菜單【圖像>圖像大小】就可以看到圖像信息:
注意上部像素大小中的寬度和高度,分別是400像素和225像素。
像素是什么?像素就是組成點(diǎn)陣圖像中的那些點(diǎn),是點(diǎn)陣圖最小的單位。如同拼成圖案的那許多馬賽克一樣。
在Photoshop狀態(tài)欄左端的縮放倍數(shù)往右一些的區(qū)域,按住ALT鍵單擊也會(huì)出現(xiàn)像素?cái)?shù)量信息,如果沒(méi)有狀態(tài)欄可用菜單【窗口>狀態(tài)欄】打開(kāi)。 如果我們放大圖像〖快捷鍵 CTRL +〗,就會(huì)看到點(diǎn)也同時(shí)被放大了,這時(shí)就會(huì)出現(xiàn)所謂的馬賽克現(xiàn)象(也稱鋸齒現(xiàn)象)。
我們可以看到有許多不同顏色的小正方形,那就是被放大的像素。每個(gè)像素只能有一個(gè)顏色。
寬400像素,高225像素,意味這幅圖像由橫方向400個(gè)點(diǎn)、豎方向225個(gè)點(diǎn)組成,400x225=90000,圖像的總像素?cái)?shù)量就是9萬(wàn)。
數(shù)碼相機(jī)有一個(gè)很重要的指標(biāo)就是300萬(wàn)像素、500萬(wàn)像素這樣的稱呼,就是指拍攝出來(lái)圖像中的像素總量。
放大縮小圖像的快捷鍵是〖CTRL +〗〖CTRL -〗,這種放大會(huì)沿著圖像的中心點(diǎn)放大。
還有一種定點(diǎn)放大方式是按住空格和CTRL鍵,用鼠標(biāo)單擊圖像的一個(gè)部分,這樣會(huì)以單擊的地方作為中心放大。縮小是按住空格和ALT鍵單擊。
如果縮放程度不夠可重復(fù)以上操作。圖像窗口的標(biāo)題欄、以及Photoshop下方狀態(tài)欄的左端,都會(huì)顯示縮放倍數(shù)。
嚴(yán)格來(lái)說(shuō)應(yīng)該是先按CTRL再按空格。但是在中文Windows下這正好是默認(rèn)的中文輸入法切換方式。因此建議先按空格再按CTRL。
如果圖像超過(guò)了圖像窗口的大小,將在右方和下方出現(xiàn)滾動(dòng)條,此時(shí)拉動(dòng)滾動(dòng)條即可移動(dòng)觀看區(qū)域(不是移動(dòng)圖像)。
也可按住空格鍵在圖像中按下鼠標(biāo)拖動(dòng)。當(dāng)鼠標(biāo)開(kāi)始拖動(dòng)以后,空格鍵可以松開(kāi)。
以上的幾個(gè)快捷鍵是最常用的。要把它們記住,這將讓你的操作變得迅速。
像素是不是越多越好呢?從大部分情況來(lái)說(shuō)是的,圖像的像素越多,記錄的信息也越詳細(xì),圖像的局部就越細(xì)致
矢量格式圖象
假設(shè)我們寫了一首新的樂(lè)曲,要把它交給唱片公司,可以通過(guò)兩種方式:
把這首樂(lè)曲彈奏出來(lái)并錄制在磁帶上。
把這首樂(lè)曲的樂(lè)譜寫下來(lái)。
這兩種方式的最大區(qū)別在于記錄的形式。
前者是記述性的。包含樂(lè)曲的音頻信息。其中的所有信息都是固定的,如演奏速度、樂(lè)器音色等。如果你想把笛子換成排簫,那就要重新錄制一遍。
后者是描述性的,不包含音頻信息,只包含對(duì)樂(lè)曲音律的描述。如果要改變演奏速度或樂(lè)器音色,只要在樂(lè)譜中修改一下就好。
點(diǎn)陣圖像就屬于記述性,以點(diǎn)為記錄的對(duì)象。而矢量圖像屬于描述性,以線段和計(jì)算公式作為記錄的對(duì)象。
比如直線:
如果以點(diǎn)陣方式來(lái)記錄,就是從左上角第一個(gè)點(diǎn)開(kāi)始,到右下角最后一個(gè)點(diǎn)結(jié)束,記錄所有像素的顏色。
記錄這幅圖像(200 x 50像素)就需要1萬(wàn)個(gè)信息。即使這條直線本身并沒(méi)有那么多像素,但點(diǎn)陣方式也是完整的把整幅圖的像素記錄下來(lái)。
因此不管是一條直線還是兩條三條,對(duì)于點(diǎn)陣圖像來(lái)說(shuō)都是一樣的。都是去逐個(gè)記錄圖像中的所有像素。
如果用矢量來(lái)記錄這條直線,只需要三個(gè)信息:直線起點(diǎn)坐標(biāo)、直線終點(diǎn)坐標(biāo)、直線的顏色。
在還原的時(shí)候就利用這三個(gè)信息去生成圖像,就如同樂(lè)隊(duì)把樂(lè)譜演奏出來(lái)一樣。
由于矢量的這種特點(diǎn),使得它非常便于修改。
比如要把上圖的直線旋轉(zhuǎn)一下,點(diǎn)陣方式就需要重新記錄所有改動(dòng)過(guò)的像素信息。而矢量圖只需要改動(dòng)起點(diǎn)和終點(diǎn)的坐標(biāo)就好了。
當(dāng)放大圖像的時(shí)候,點(diǎn)陣圖像會(huì)產(chǎn)生模糊和鋸齒。就如同錄音帶播放時(shí)候加速產(chǎn)生的變調(diào)。對(duì)圖像質(zhì)量是有損失的。
而矢量圖像是根據(jù)放大后的坐標(biāo)重新生成圖像,不會(huì)產(chǎn)生模糊和鋸齒。就如同樂(lè)隊(duì)根據(jù)新樂(lè)譜重新演奏。對(duì)圖像質(zhì)量是沒(méi)有損失的。
為什么在第一次縮小之后沒(méi)有看出區(qū)別呢?
這是因?yàn)榭s小點(diǎn)陣圖像是不會(huì)產(chǎn)生模糊的,在丟棄原先的一些像素后,剩下的像素是足夠描述圖像的,并沒(méi)有產(chǎn)生像素空缺。而放大后才產(chǎn)生了像素空缺。
為什么矢量圖像“飽經(jīng)風(fēng)霜”卻依舊“面不改色”呢?這就是因?yàn)榍懊嬲f(shuō)過(guò)的矢量圖像的特點(diǎn):通過(guò)記憶線段的坐標(biāo)來(lái)記錄圖像。
圖像放大縮小的同時(shí)坐標(biāo)也放大縮小,而各個(gè)坐標(biāo)之間的相對(duì)位置并沒(méi)有改變。然后根據(jù)改動(dòng)后的坐標(biāo)重新生成圖像。因此無(wú)論放大多少都不會(huì)失真。
I believe someone who is writing blog is nothing more than show himself off ,I won't be one of them any more.
篩素?cái)?shù),在天哥的威逼利誘下改了篩素?cái)?shù)的模板...以后PE都python了...
#Firename:pe37.py
import math
N=1000000
prime = [0 for row in range(N)]
res = []
top=0
def Prime():
for i in range (2,N):
prime[i]=1
prime[0],prime[1]=0,0
for m in range(2,N):
if prime[m]==1:
prime[m]=1
res.append(m)
for k in range(2*m,N,m):
prime[k]=0
tot=0
Prime()
for i in range(len(res)):
temp=res[i]
flag=0
while temp>0:
if prime[temp]!=1:
flag=1
break
temp/=10
temp=res[i]
t=1
while temp>0:
temp/=10
t*=10
temp=res[i]
while t>0:
if prime[temp]!=1:
flag=1
break
tmp=temp/t
temp=temp-tmp*t
t/=10
if flag==0 and res[i]>10:
top+=1
tot+=res[i]
print tot
print top
后來(lái)發(fā)現(xiàn)python里面原來(lái)有直接可以求素?cái)?shù)的函數(shù) - -||
#prime_list(n) 返回一個(gè)list,存1 - n 內(nèi)的素?cái)?shù)
#prime_table(n) 返回一個(gè)list,用0 1 表示是不是素?cái)?shù)
繼續(xù)研究C++builder,ms程序里有某個(gè)變量溢出了..但是百思不得其解..于是向萬(wàn)老師請(qǐng)教C++builder的調(diào)試方法..然后萬(wàn)老師教了我一個(gè)她自己調(diào)試方法..感覺(jué)很實(shí)用..類似于VC里面調(diào)試的printf();
(1)Form的方法ShowMessage(String);
這個(gè)函數(shù)可以把出你想知道的任意中間變量的值用消息框的形式顯示出來(lái)。
Example:
int Varies;
Form1->ShowMessage(IntToStr(Varies));
(2)利用Form的Memo控件
可以同時(shí)查看很多變量;先在窗體中添加一個(gè)Memo控件,然后調(diào)用Memo->Lines->Add(String)把要觀察的變量加進(jìn)去;
Example:
float sum=0;
for(i=1;i<=100;i++)
{
sum+=1.0/i;
Form1->Memo->Lines->Add(FloatToStr(sum));
}
試過(guò)..不錯(cuò)~~
8.24
今天去問(wèn)了萬(wàn)老師….萬(wàn)老師是果然是C的牛人啊…聽(tīng)她說(shuō)她以前做的項(xiàng)目…仰慕中…聽(tīng)她說(shuō)以前C語(yǔ)言和她讀書的事情…..很好玩~~…
解決了一些問(wèn)題:
1.
怎么使Plane和界面相符合
Plane->Align可以改
2.
Label的字體大小
Label->font
3.直接在頭文件里面添加變量和通過(guò)newfield添加有區(qū)別嗎
沒(méi)有
4.
Mousemove&&Mousedown&&Mouseup
Form的響應(yīng)函數(shù),研究ing
5.
Timer 的用法
和MFC的OnTimer類似..
6.
Scree類.
7.
關(guān)于rand()
感覺(jué)今天最大的收獲就是學(xué)會(huì)了怎么用幫助文檔…以前都不知道.
還順便問(wèn)了一下抽獎(jiǎng)程序的問(wèn)題..shmm他們說(shuō)要做個(gè)抽獎(jiǎng)程序….聽(tīng)萬(wàn)老師說(shuō)的ms不是很難..原來(lái)滾動(dòng)條顯示名字都是假象…真實(shí)的情況是產(chǎn)生一個(gè)隨機(jī)數(shù)然后把響應(yīng)的明字顯示出來(lái)就可以了..
C++builder 真的挺不錯(cuò)的..個(gè)人感覺(jué)比MFC簡(jiǎn)單實(shí)用…
研究python ing 什么都不懂的...
刷水題練python...
#Fiename:pe44.py
import math
arr = [0 for row in range(10000)]
def check(x):
i=int(math.sqrt(x*0.2/3))-1
while (i*(i*3-1))/2<x:
i=i+1
if i*(i*3-1)/2==x:
return 1
return 0
for i in range (1,3000):
arr[i]=i*(i*3-1)/2
Max=0xfffffff
for i in range (1,3000):
for j in range(i+1,3000):
if check(arr[i]+arr[j])==1 and check(arr[j]-arr[i])==1 and arr[j]-arr[i]<Max:
Max=arr[j]-arr[i]
print Max