網易2013實習生試題:
5、請問func(0x7f530829)的返回值是()
intfunc(unsigned
inti)
a、15
b、16 c、17 d、18
函式實現的是求二進位制表示的時候,1的個數,一共15個
最開始把每乙個位看做乙個節點,相鄰節點值相加,結果用兩個位表示。。。
然後每兩個位看做乙個節點,相鄰節點值相加,結果用四個位表示。。。
以此類推,直到只剩下乙個節點。。。
思考:1110
把每乙個位看做乙個節點,相鄰節點值相加,相當於將他們以相鄰為依據分為兩組: [1,1] [1,0] 每組的1的和為 [1+1] [1+0] => [10][01](注意二進位制)
現在結果為1001
將每兩個位看做乙個節點。相鄰的就只有一組了:[10,01] 每組的1的和為[10+01]=>[0011],此時只有一組,結果就是這一組的1的個數了。
一開始,咋一看很神奇。其實仔細分析就明白。當成節點的時候,其意義不在是以前的意義了。而已表示為此個節點的1的個數了。節點也是不會溢位的,因為每次相加後進入到下次的階段了。節點位數將翻倍增長,所以是不會溢位的。
擴充:
一段是不用迴圈,實現乙個無符號整數的位交換(翻轉0x00000002=》0x40000000)的程式:
unsigned bit_reverse( unsigned intn)
同一的道理。
不用除法實現%13操作(位操作)
使用除法很簡單n= 13*(n/13)+ mod。mod為n%13但是這裡不能使用除法。
考慮:n%7不要模7運算
設n=8*(n/8)+mod8,mod8為n%8
n%7 = (8*(n/8)+mod8)%7 = (7*(n/8)+ (n/8)+mod8) %7 = ((n/8)+mod8) %7 = m%7 (設m=(n/8)+mod8)
求n%7化成了m%7,迭代下去,且n<=m,
當n只有當n/8=0時才相等。即n為0~7時,可當為0~7時我們就可以直接得出結果了。
下面解釋如何不用模8運算,以下紅色欄位摘於網路
描敘:n= ( 8*x + y)
其中 x = n >> 3 , y = n &ox7 (這個意思其實就是x=n/8, y=n%8,自己琢磨吧,所以這樣就可以不使用模8運算也可以)
n % 7 = ( 8 * x + y ) % 7 = (7 * x + x + y) % 7 = x + y
不斷的迭代,知道 (x +y) < n 為止
%13 也是同樣的道理:
雖然說是同樣地道理其實它並沒有說明白,下面是他給出的**,有問題,你能找出來麼?
#include"stdio.h
"#include
"stdlib.h
"#define bitmod 0xf
#define bit 4
#define mod 13
intmain()
if ( temp == mod)
temp = 0
;printf(
"the number %d mod %d is : %d
",temp1 ,mod, temp);
return0;
}
其實是這樣的。在給出的求模7的例子裡面。是恰巧,使用了模8不斷的減小數值。事實上剛才所說的,縮小到最後只能縮小在0到8-1=7範圍的中。
而**中使用同樣地道理,用模16去所縮小數值。可是最後的只能縮小在0到16-1=15的範圍中。如果縮小在0到13(13他剛好使用了其他的方式處理了)還好,這樣可以直接出結果。可是,當14、15的是以上的**將進入死迴圈了。
其實這整個思想就是通過移位實現到某種模a值運算,在使用這種模a值方式去減小模b值。其中b
int func9(intnum)
}else
num =temp ;
}if ( temp ==mod)
temp = 0;
return
temp ;
}
其實,這時你想問題模13不使用除法那不是容易麼!!!如果乙個正整數大於13,就一直將去13直到落於0~12的範圍不就行了麼?當然行,問題是時間複雜度為o(n),而我們使用的方法呢?可以這麼考慮,每次向右移4位。n最大位數為log2(n),估值相當於o(log16(n))了。
畢
網易2019實習生Java程式設計題
題1 平面內有n個矩形,第i個矩形的左下角座標為 x1 i y1 i 右上角座標為 x2 i y2 i 如果兩個或者多個矩形有公共區域則認為它們是相互重疊的 不考慮邊界和角落 請你計算出平面內重疊矩形數量最多的地方,有多少個矩形相互重疊。思路 把座標離散化之後直接統計 當時通過率90 include...
網易2019實習生招聘程式設計題集合
為了找到自己滿意的工作,牛牛收集了每種工作的難度和報酬。牛牛選工作的標準是在難度不超過自身能力值的情況下,牛牛選擇報酬最高的工作。在牛牛選定了自己的工作後,牛牛的小夥伴們來找牛牛幫忙選工作,牛牛依然使用自己的標準來幫助小夥伴們。牛牛的小夥伴太多了,於是他只好把這個任務交給了你。小q得到乙個神奇的數列...
網易2018實習生c 開發程式設計題
小q得到乙個神奇的數列 1,12,123,12345678910,1234567891011 並且小q對於能否被3整除這個性質很感興趣。小q現在希望你能幫他計算一下從數列的第l個到第r個 包含端點 有多少個數可以被3整除。輸入描述 輸入包括兩個整數l和r 1 l r 1e9 表示要求解的區間兩端。輸...