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

圖【1】
圖【1】是需要復制的鏈表

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

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