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

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

圖【2】
如圖【2】所示,ABCD是原來的鏈表,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)的時間復(fù)雜度。。。

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