迅雷的一道題目
求\t\r\\t\0345\r字串的長度
這個問題看過很多遍了,有的時候覺得是顯而易見的,但是其實根本就沒完全明白。。
方法一:
int func(int n)
這個演算法的每一次迴圈將會去掉最右邊的乙個1,直到n為0!
方法二:
unsigned int func(unsigned int x)
這個演算法理解起來很難,想了好長時間,計算1的個數是利用二分的方法,將所有位元遞迴相加,可以看到,首先是偶數字元和奇數字元相加,如果1的位元組在最後兩個位元上的話,那麼這就足夠計算1的個數了,但實際上高位可能存在1,所以將這個過程持續下去,第二次就將相鄰兩個位元組成乙個組,同樣將奇陣列和偶數組相加,這樣下去,所有高位的計數最後就合併到低位計數上了。
+---+---+---+---+---+---+---+---+
| 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | <---原數
+---+---+---+---+---+---+---+---+
| 1 0 | 0 1 | 0 0 | 1 0 | <---第一次運算後
+-------+-------+-------+-------+
| 0 0 1 1 | 0 0 1 0 | <---第二次運算後
+---------------+---------------+
| 0 0 0 0 0 1 0 1 | <---第三次運算後,得數為5
+-------------------------------+
整個程式是乙個分治的思想。第一次我們把每相鄰的兩位加起來,得到每兩位裡1的個數,比如前兩位10就表示原數的前兩位有2個1。第二次我們繼續兩兩相加,10+01=11,00+10=10,得到的結果是00110010,它表示原數前4位有3個1,末4位有2個1。最後一次我們把0011和0010加起來,得到的就是整個二進位制中1的個數。程式中巧妙地使用取位和右移,比如第二行中$33333333的二進位制為00110011001100....,用它和x做and運算就相當於以2為單位間隔取數。shr的作用就是讓加法運算的相同數字對齊。
這兩天的想法
你太感性了 這是昨天和乙個老朋友 聊天時,她對我的評價。我的確很感性,以至於很多時候,我看那種比較感人的電影都會流淚。這沒有什麼不好,至少我這樣認為。我的煩惱是 雖然我是乙個很感性的人,可是在某些需要感性的時候,我卻表現得太理性。team裡乙個新來的mm對我說 咱們公司裡的女生,很多都自信得有點過頭...
這兩天的工作
這兩天是週末,一直在看關於arm和embedded system的書。tsinghua小杜的那本書實在是錯誤太多了。好象沒有經過任何的校對就拿來出版了。時不時就過來幾個莫名其妙就出來乙個暫存器得符號!我敢和你打賭絕對是他錯了,看來有必要在我得blog幫他出個勘誤表了。還有昨天晚上用了3個小時的時間來...
這兩天的狀態。
星期一,2005年10月17號,我跟我們公司的頭說,我辭職。事實上我也盡力的在用自己的忍耐和我的性格做鬥爭。我無法忍受乙個這樣的公司,老闆的固步自封,老闆把企業的倫理都踐踏了,家族企業的通病,根本沒什麼團隊合作,團隊精神可言,無論什麼事,你只要按著頭的意思去辦就行。毫無歸屬感,從來沒有被尊重的感覺。...