日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2012.9华为软件开发面试题

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2012.9华为软件开发面试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. C語言結構體數據對齊

轉自:http://blog.csdn.net/tiany524/article/details/6295551

1.1 結構體數據對齊(沒有#pragma pack()宏定義)

結構體對齊可以總結為三個基本原則

數據成員對齊規則:

結構體的數據成員中,第一個成員從offset為0的地址開始,以后每一個成員存儲的起始位置為該成員大小的整數倍(在win32中int為32bit也即4字節對齊)

結構體作為成員:

如果一個結構體1作為另一個結構體2的數據成員,則在結構體2中結構體1要從1內部成員最大的整數倍地址開始存儲。

結構體的總大小(sizeof):

為該結構體內部最大基本類型的整數倍,不足的要補齊,而不是簡單的所有成員的大小總和。

舉例說明

?

1 struct A 2 { 3 short a; 4 short b; 5 short c; 6 };

sizeof(A)=6

1 struct B 2 { 3 long a; 4 short c; 5 };

sizeof(B)=8

它的內存分配為: a1 a2 a3 a4 , c1 c2 x x(a1為a的第一個字節,x為補齊字節,下同)

?

1 struct C 2 { 3 int a; 4 char b; 5 short c; 6 };

sizeof(C)=8

它的內存分配為: a1 a2 a3 a4, b1 x c1 c2(原則1)

?

?

1 struct D 2 { 3 char a; 4 int b; 5 short c; 6 };

?

sizeof(D)=12

內存分配為: a1 x x x, b1 b2 b3 b4, c1 c2 x x

?

1 struct E 2 { 3 int a; 4 double b; 5 short c; 6 };

sizeof(E)=24

內存分布a1 a2 a3 a4 x x x x, b1 b2 b3 b4 b5 b6 b7 b7, c1 c2 x x x x x x

?

1 struct F 2 { 3 char a,b; 4 int c; 5 double d; 6 short e; 7 E h; 8 };

sizeof(F)=48

內存分布

a1 b1 x x, c1 c2 c3 c4 , d1 d2 d3 d4 d5 d6 d7 d8, e1 e2 x x x x x x, A的分布

?

?

1.2 加入#pragma pack()宏定義)

1 #pragma pack(1) 2 struct E 3 { 4 int a; 5 double b; 6 short c; 7 };

sizeof(E)=14,為實際內存
VC對結構的存儲的特殊處理確實提高CPU存儲變量的速度,但是有時候也帶來了一些麻煩,我們也可以屏蔽掉變量默認的對齊方式,自己可以設定變量的對齊方式。
VC 中提供了 #pragma pack(n) 來設定變量以n字節對齊方式(n一般取1、2、4、8、16)。n字節對齊就是說變量存放的起始地址的偏移量有兩種情況:第一、如果n大于等于該變量所占用的字節數,那么偏移量必須滿足默認的對齊方式,第二、如果n小于該變量的類型所占用的字節數,那么偏移量為n的倍數,不用滿足默認的對齊方式。結構的總大小也有個約束條件,分下面兩種情況:如果n大于所有成員變量類型所占用的字節數,那么結構的總大小必須為占用空間最大的變量占用的空間數的倍數; 否則必須為n的倍數。下面舉例說明其用法。

1 #pragma pack(push) //保存對齊狀態 2 #pragma pack(4)//設定為4字節對齊 3 struct test 4 { 5 char m1; 6 double m4; 7 int m3; 8 }; 9 #pragma pack(pop)//恢復對齊狀態

以上結構的大小為16,下面分析其存儲情況,首先為m1分配空間,其偏移量為0,滿足我們自己設定的對齊方式(4字節對齊),m1占用1個字節。接著開始為 m4分配空間,這時其偏移量為1,需要補足3個字節,這樣使偏移量滿足為n=4的倍數(因為sizeof(double)大于n),m4占用8個字節。接著為m3分配空間,這時其偏移量為12,滿足為4的倍數,m3占用4個字節。這時已經為所有成員變量分配了空間,共分配了16個字節,滿足為n的倍數。如果把上面的#pragma pack(4)改為#pragma pack(16),那么我們可以得到結構的大小為24。

?

?

2. 約瑟夫環問題

http://baike.baidu.com/view/717633.htm

問題描述:n個人(編號0~(n-1)),從0開始報數,報到m-1的退出,剩下的人繼續從0開始報數。求勝利者的編號。

我們知道第一個人(編號一定是(m-1)%n) 出列之后,剩下的n-1個人組成了一個新的約瑟夫環(以編號為k=m%n的人開始):

k k+1 k+2 ... n-2,n-1,0,1,2,... k-2

并且從k開始報0。

  現在我們把他們的編號做一下轉換:

  k --> 0

  k+1 --> 1

  k+2 --> 2

  ...

  ...

  k-3 --> n-3

  k-2 --> n-2

變換后就完完全全成為了(n-1)個人報數的子問題,假如我們知道這個子問題的解:例如x是最終的勝利者,那么根據上面這個表把這個x變回去不剛好就是n個人情況的解嗎?!!

  ∵ k=m%n;

  ∴ x' = x+k = x+ m%n ; 而 x+ m%n 可能大于n

  ∴ x'= (x+m%n)%n = (x+m)%n

  得到 x‘=(x+m)%n

令f表示i個人玩游戲報m退出最后勝利者的編號,最后的結果自然是f[n].

  遞推公式:

  f[1]=0;

  f[i]=(f[i-1]+m)%i; (i>1)

?

?

3. 求出小于n的最大素數,并做時間復雜度優化

?

4. 不限長的數據運算問題,字符數組模擬大數

?

?

?

轉載于:https://www.cnblogs.com/shenshanxiaoyao/archive/2012/09/08/2677094.html

總結

以上是生活随笔為你收集整理的2012.9华为软件开发面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。