網易2013實習生試題 第五題

2022-08-20 17:39:10 字數 2267 閱讀 1689

網易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 int

n)

同一的道理。

不用除法實現%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(int

num)

}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 表示要求解的區間兩端。輸...