1. 程式人生 > >2013年微軟實習生招聘筆試題目(c/c++你懂多少?)

2013年微軟實習生招聘筆試題目(c/c++你懂多少?)

今天本是清明放假,但是,但是微軟就是在今天下午組織了筆試考試,據說是全國統考。75分鐘,20 道選擇題,問題是,問題是神馬?先看下簡單的評分:

1-8      3     2    -2     0
9-18     5     3    -3     0
19-20    13    7    -7     0

1-8 每題 3 分,完全正確 3 分,不完全正確但是沒有錯誤 2 分,有錯誤 -2 分,不做 0 分;19、20 題,完全正確 13 分,有錯就是 -7 分,不做 0 分。是的,麼有看錯,有負分!做錯了,不僅意味著本道題的分不得,而且要倒扣,簡單滴說,最後一題做錯了,就會從 100 分中扣去 20 分,因為本題得分 -7 分!如果題目全部都錯做了,估計是 -50 多分!

題目給 me 的趕腳是,非大牛不能得高分,像 me 們這些半斤八兩的,還不敢輕易選擇,估計多數都是半對,實際上得一半的分。廢話不多說,上題(題目是 me 翻譯過來的,無礙大局的地方有所修改,所以不算原模原樣的題)。me 會將 me 認為的正確答案標註為藍顏色,而 me 選的答案標註為紅顏色(me 沒有標準和正確答案),後面加上題目分析。

筆試題目

  1. 下面哪些呼叫轉換支援可變長度引數:( 3 分 )
    A. cdecl B. stdcall C. pascal D. fastcall
    注:me 表示丫梨很大,第一題不會,~~~~(>_<)~~~~

    分析:關於上面的函式修飾符的詳細說明,可以看看

    百度百科。這裡也簡單說明,cdecl 是 C 語言的呼叫方式,函式引數從右到左求值,然後入棧,引數由呼叫方負責清理,傳多少引數其實都無所謂的,於是就支援所謂的可變長度的引數;stdcall 是 C++ 的呼叫方式,引數從右到左求值,入棧,由被呼叫方處理引數,所以引數個數型別都必須匹配;pascal 是對 PASCAL 函式的呼叫方式,引數自左向右求值,其他類似於 stdcall;而 fastcall 的情況忽略。

  2. 下面程式執行結果:( 3 分 )
    1. #include <iostream>
    2. using namespace std;
    3. class A{
    4. public:
    5.     virtual
       void f() {   cout << "A::f() "; }
    6.     void f() const {   cout << "A::f() const "; }
    7. };
    8. class B : public A
    9. {
    10. public:
    11.     void f() {   cout << "B::f() "; }
    12.     void f() const {   cout << "B::f() const "; }
    13. };
    14. void g(const A* a)
    15. {
    16.     a->f();
    17. }
    18. int main(int argc, char *argv[])
    19. {
    20.     A* p = new B();
    21.     p->f();
    22.     g(p);
    23.     delete(p);
    24.     return 0;
    25. }

    A. B::f() B::f() const
    B. B::f() A::f() const
    C. A::f() B::f() const
    D. A::f() A::f() const

    分析:用 const 來修飾函式和沒用 const 是不同的過載,const 修飾函式表明,函式不能修改物件的狀態/值。對於非 const 物件呼叫非 const 函式,當然也可以呼叫 const 函式(優先前者);然而 const 物件只能呼叫 const 函式。其次,A 中的 void f() 標註為 virtual ,那麼子類 B 中跟它原模原樣宣告即使米有標註為 virtual 的函式依然是 virtual 函式。virtual 函式就是通常所謂的實現多型的方法了,比如,上面的 p->f(); p 雖然是 A 型別指標,但是實際上指向 B 物件,呼叫的時候呼叫的是 B 的 f() 方法。為嘛 a->f() 不呼叫 B 的 f() const 方法呢?c++ 除非標註為 virtual,否則不進行多型,也就是說 a 是 A 型別的指標,就呼叫 A 對應的 f() const 方法。
    問題並沒有到此結束,上面的程式碼就是有 bug 的,試問,delete p; 的時候刪除物件,是作為 A 物件刪呢,還是 B 物件刪呢?p 的型別是 A*,但是指向的是 B 物件丫,好吧,這裡應該使用多型,正確的做法應該將 A 的解構函式標註為 virtual,否則,程式就有 undefinde behaviour(未定義的行為)。繼續討論,看下面的 code :

    1. int main(int argc, char *argv[])
    2. {
    3.     A base = B();
    4.     base.f();
    5.     g(&base);
    6.     return 0;
    7. }

    這裡的結果會和上面的一樣麼?!——,實際情況是神馬呢,——,不一樣!這個時候的結果選 D,理由:多型只能通過指標和引用使用,物件不能使用。說到引用,將上面的程式碼修改為 A& base = B(); 會怎麼樣呢?編譯錯誤!引用不能引用臨時物件!所以程式碼只能改為 B b; A& base = b; 比如下面的:

    1. int main(int argc, char *argv[])
    2. {
    3.     B b;    // B b();
    4.     A& base = b;
    5.     base.f();
    6.     g(&base);
    7.     return 0;
    8. }

    這個時候程式的結果還是 B。定義 b 的時候,使用上面註釋掉的行不行呢?不行,因為那樣,編譯器會認為 b 是一個函式!!what?!!預設構造物件的時候,() 是不能加的??!!好吧,就是這樣。再進一步說,會不會趕腳上面的程式碼有點“蹩腳”?如果 A a = B(); 就是可以的,然而 A& a = B(); 不可以,而要首先去定義一個 B物件,然後去引用,麻煩!好吧,c++11給 me 們帶來了新希望(如果 u 不認為是災難的話):

    1. int main(int argc, char *argv[])
    2. {
    3.     A&& base = B();
    4.     base.f();
    5.     g(&base);
    6.     return 0;
    7. }

    這裡的結果的答案還是 B。A&& 是右值引用,使得 me 們可以引用到一個臨時量 B(); 自此以後那個臨時量就歸右值引用管了,不再算是臨時量。基本到此為止,有點混亂,有點O__O"…。再最後補充一句,少用指標,多用物件和引用!(使用引用的時候,解構函式貌似不需要顯式地標註為 virtual,這一點細節有點不清楚,至少編譯器對此沒有提示。)

  3. 連結串列和陣列的區別: ( 3 分 )
    A. 在有序的情況下搜尋
    B. 插入和刪除
    C. 隨機訪問

    D. 資料儲存型別

    分析:ABC 是明顯的,有序的情況下陣列可以二分查詢,而連結串列不可以;插入和刪除,陣列不如連結串列靈活;連結串列不如陣列可以隨機訪問。D 選項,不敢選,me 資料結構感覺跟儲存型別麼有必然關係,如果說儲存型別指的是棧 (stack) 或是堆 (heap) 的話,陣列也可以在堆上分配,連結串列也可以是靜態連結串列(棧上的空間)。

  4. Windows 下程序和執行緒的描述,哪些是對的:( 3 分 )
    A. 作業系統的一個程式必須有一個程序,但是不必須有一個執行緒
    B. 程序有自己的棧空間,而執行緒只共享父程序的棧空間
    C. 執行緒必從屬於一個程序
    D. 執行緒可以更改從屬的程序

    分析:最初 me 不確定有些說法,因為題目強調說的是 Windows 下的程序和執行緒,不過後來翻看了下書,基本確定了某些說法。Windows 中的程序和執行緒的概念和一般作業系統書中的說法是一致的,程序是資源分配的基本單位,而執行緒是 CPU 排程的基本單位;一個執行緒從屬於一個程序,當然一個程序可以建立多個執行緒,一個程序中的多個執行緒共享程序的棧空間(當然也有其他一些資源);但是每一個執行緒也可以有自己的棧空間,叫 TLS(執行緒本地儲存);如果一個程序中沒有顯式地建立一個執行緒,那麼就是所謂的單執行緒程序,其實也就是 main 執行流對應的執行緒。這樣的話,A、B 是錯的,C 是對的,而執行緒可以更改所屬程序,太扯了,錯誤!補充一點,記得以前看 UNIX 高階程式設計,貌似有這樣的說法:UNIX 系統的程序和執行緒和前面的說法也基本一致,但是 Linux 卻特殊一點,特殊到哪一點呢?似乎沒有程序和執行緒的明確劃分,都是執行緒,只不過有些執行緒就是共享一些資料(類似於執行緒共享程序的資料),給人的趕腳就是同屬於一個程序;有些執行緒不同享資料,就如同程序一般有所區分。(這裡的說法不一定準確,所以,O__O"…)

  5. 下面程式碼段的執行結果:( 3 分 )
    1. #include<stdio.h>
    2. int main()
    3. {
    4.     int x = 10;
    5.     int y = 10;
    6.     x = x++;
    7.     y = ++y;
    8.     printf("%d %d", x, y);
    9.     return 0;
    10. }

    A. 10 10 B. 10 11 C. 11 10 D. 11 11

    分析:神奇的題目有木有丫!按標準的說法,像 x=x++; 這樣的表示式,是 undefined !就是標準中沒有定義的。因為 x++ 表示式的值是 10 ,後來要賦值給 x,其次 x 還要自加 1,問題是,先賦值呢,還是先自加呢?這裡沒有統一的說法!雖然 y = ++y; 不管怎麼說結果都一樣,me 認為這樣的表示式也不是很合理!在一個表示式中對同一個變數多次賦值和多次使用,結果很難把握。
    說說執行結果:多數人在 vc++ 和 gcc 下執行結果都是 D,但是 me 的執行結果是 B,me 的系統,win7 64位,使用 Mingw-w64 gcc 4.8.0 編譯器。

  6. C# 或是 Java 程式段的結果:( 3 分 )
    1. int[][] array = new int[3][]{
    2.     new int[3]{5,6,2},
    3.     new int[5]{6,9,7,8,3},
    4.     new int[2]{3,2}
    5. };

    array[2][2] 返回神馬 ?
    A. 9 B. 6 C. 2 D. 溢位

    分析:介個,貌似不用多說,跟 C 中的陣列有所區分,C 中的二維陣列就是相同一維陣列的陣列,結構比較整齊,而 Java/C# 中的二維陣列僅僅是一維陣列的陣列而已,所以 array[2][2] 這個元素其實不存在,在 Java 中執行會丟擲越界異常。(實際上面的程式碼段不是合法的 Java 程式碼段,不過意思是那樣的。)

  7. 下面說法哪些正確?( 3 分 )
    A. const int a; // a 是常數
    B. int const a; // a 是常數
    C. int const *a; // a 指向常數的指標

    D. const int *a; // a 是常指標
    E. int const *a; // a 是常指標

    分析:關於 const 和 static 貌似永遠有說不完的話題,O__O"…。A、B、C 都是正確的,D 和 E 都是指向常量的指標,const 放置到 int 前面還是後面不是問題所在,而 int * const a; 才是常量指標,可以修改指向的值,但是不能修改指向。實際話題還可以再深入些,比如 A 的宣告是合法的 C++ 宣告嗎?是合法的 C 宣告嗎?在 C++ 中 A 的寫法肯定是 error,因為沒有初始化!而在 C 中,A 只是宣告而已,就是說明它是一個 const int,maybe 在其他處定義了。下面的程式碼段:

    1. int const a = 3;
    2. int const a;
    3. int main(int argc, char *argv[])
    4. {
    5.     return 0;
    6. }

    c 程式上面是合法程式,c++ 是錯誤程式!如果 typedef int *PtrInt; 這種情況下 const PtrInt a; a 是常量指標呢,還是指向常量呢?—— 可以自己去嘗試一下。(答案:常量指標。)

  8. 下面程式的執行結果:( 3 分 )
    1. #include <iostream>
    2. class A{
    3. public:
    4.     long a;
    5. };
    6. class B : public A
    7. {
    8. public:
    9.     long b;
    10. };
    11. void seta(A* data, int idx)
    12. {
    13.     data[idx].a = 2;
    14. }
    15. int main(int argc, char *argv[])
    16. {
    17.     B data[4];
    18.     for(int i=0; i<4; ++i){
    19.         data[i].a = 1;
    20.         data[i].b = 1;
    21.         seta(data, i);
    22.     }
    23.     for(int i=0; i<4; ++i){
    24.         std::cout  << data[i].a << data[i].b;
    25.     }
    26.     return 0;
    27. }

    A. 11111111 B. 12121212 C. 11112222 D. 21212121

    分析:程式的執行結果是 22221111,這裡沒有答案!至於答案的分析,應該涉及到 c/c++ 記憶體物件的佈局問題,雖然 me 不大懂,但是還是可以“想當然”滴班門弄斧一下。像上面的類 A,和 c 中的結構體是相容的,在 c++ 中叫做 POD,結構體中資料佈置,應該是按照宣告的順序放置的(中間可能有空隙),所謂名字的訪問其實也是根據順序訪問的,看個下面的例子:

    1. #include<stdio.h>
    2. struct Test{
    3.     int a;
    4.     int b;
    5. };
    6. int main(int argc, char *argv[])
    7. {
    8.     long long test = 0x1234567887654321;
    9.     printf("%x %x"(*(struct Test*)&test).a(*(struct Test*)&test).b);    // 87654321 12345678
    10.     return 0;
    11. }

    int 是 4 個位元組,long long 是 8 個位元組,強制將 long long 的 test 當做結構體 struct Test 處理,.a 訪問的是低 4 個位元組的內容,.b 訪問的是高 4 個位元組的內容。有了這點基礎,再來看原來的題目,A 是一個類(結構體),裡面只容納一個 long,(me 電腦上 4 個位元組),B 繼承了 A,又多容納了一個 long,實際就是倆 long。data 的 B 型別陣列 4 個物件,本來是 8 個 long,不看 seta 函式的話,全部是 1,而在函式 seta 中處理的時候,陣列變成 A 型別的了,一個 A 元素是一個 long,所以在函式 seta 內部,訪問 data[0] - data[3] 實際是訪問的 8 個 long 的前 4 個 long,也就是將前 4 個 long 置為 2,前 4 個 long 在 main 函式中對應的就是 B 型別陣列的 data[0].a、data[0].b、data[1].a、data[1].b,於是乎 main 函式輸出 B 陣列物件,結果是 22221111。

  9. 1000 個瓶子中有一瓶毒藥,一隻老鼠吃到毒藥一週之內會死,如果要在一週之內檢測出有毒藥的一瓶,問至少需要幾隻老鼠?( 5 分 )
    A. 9 B. 10 C. 32 D. 999 E. 上面答案都不對

    分析:當初圖樣圖森破,圖拿衣服。老鼠吃過藥不會立馬死,當時 me 這個重點麼抓到,其次,要測出來這瓶毒藥至少幾隻老鼠,me 當時傻×:最少一隻吧,比如正好碰巧測出來!~~~~(>_<)~~~~好吧,網上這個題目有很多人已經回答了,10 只老鼠,因為每隻老鼠的死亡狀態可能有 2 種,10 只的話,可以拼湊出 2 ^ 10 = 1024 種狀態,也就是 1024 只瓶子的情況都可以測出來,至於細節,下面敘述。

    0 - 1023 的話,用二進位制表示正好是 10 位,每一位都是 0 或是 1。如果第一位表示第一隻老鼠吃不吃的情況,第二位表示第二隻老鼠吃不吃的情況,第 n 位表示第 n 只老鼠吃不吃的情況,首先說,這 1024 個瓶子,正好可以給老鼠們一種吃法,現在的問題是,比如第 k 瓶有毒,老鼠們肯定有一種狀態吧,比如有些死了,有些沒有死,我們希望第 k 瓶有毒就對應一種狀態,這樣的話,根據狀態就可以反推是第 k 瓶。現在就看是不是有這麼個一一對應關係。
    比如第 1 瓶有毒,0000...0001,第一隻老鼠吃了,其他的老鼠都沒有吃,如果有毒的話,第一隻老鼠就死了,其他老鼠都沒事(注:其他瓶沒有毒,所以即使第一隻老鼠吃了其他瓶,其他老鼠也吃了其他的瓶,但是它們的命運卻不改變,就因為第 1 瓶有毒!);再比如第 3 瓶有毒,0000...0011,第一、二隻老鼠吃了,其他老鼠沒有吃,結果第一和第二隻老鼠死了,其他老鼠沒事(注:它們有沒有吃其他的瓶子也不影響它們的命運,因為第 3 瓶有毒!)。由此可見,第 k 瓶有毒,就是 k 對應的二進位制數的二進位制位為 1 的老鼠死掉,這是必然的。一瓶毒藥的方法,比如第 k 瓶,對應一個二進位制數,對應一種老鼠死法,所以,一種老鼠死法,就對應一瓶毒藥的方法,也就是根據老鼠的死法,就能判斷出是第多少瓶:

    將第 i 只老鼠死了,記二進位制的第 i 位為 1,然後看看這個二進位制是多少,就可以了。(前提,根據瓶子的編號,分配老鼠吃藥,二進位制位上為 1 表示吃。)

    方法是不是唯一的呢?對稱的還有一種,根據瓶子的編號,還是給老鼠喂藥,對應編號為 1 的不喂,對應編號為 0 的反而喂藥,最終判斷方法如何呢?

    將第 i 只老鼠死了,記二進位制的第 i 位為 0,然後看看這個二進位制是多少,就可以了。(前提,根據瓶子的編號,分配老鼠吃藥,二進位制位上為 1 表示不吃。)

  10. 在 C 語言中下面那個語句的結果是 1 ?( 5 分 )
    A. main 函式正常結束的返回值
    B. return 7&1;
    C. char *p="hello"; return p == "hello";
    D. return "hello" == "hello";
    E. 上面都不對

    分析:A 一定是錯的,C/C++ main 函式正常結束,返回 0;B 一定是對的,C 和 D 呢?標準 C 規定是,同樣兩個字串字面量,比如 "hello",記憶體是放一份還是兩份,由編譯器決定!所以,C 和 D 的結果,一般的編譯器應該會有警告提示,說明是 undefined behaviour !(前面第 2 題和第 5 題,也有遇到過!) 所以,C 和 D 只能說很可能是對的,但是卻不一定!

  11. F、G、X 都是32位有符號整數,F=X/2,G=X>>1,如果 F != G,那麼:( 5 分 )
    A. 編譯錯誤
    B. X 是奇數
    C. X 是負數
    D. F-G=1
    E. G-F=1

    分析:前面第 5 題和第 10 題都出現了 undefined behavior 的行為!不幸的是,這裡又出現了一個!~~~~(>_<)~~~~ 這是 Microsoft 的錯,這種題就根本就不應該出!

    A 肯定是錯的,C 肯定是對的,因為正數和0,一定不會出現 /2 和 >>1 不相等的情況。然後 B 和 D 呢?如同上一題,幾乎可以肯定滴說,B 和 D 也是對的,為神馬是幾乎肯定?因為負數的右移,多數都是實現為“算術移位”,如果是“邏輯移位”的話,一個負數移位之後變成了一個正數,B 和 D 都不對。
    現在說,“算術移位”,B 是對的。算術移位,最高位填 1,對於負偶數來說,/2 和 >>1 結果還是一樣,跟正數類似,所以,結果不一樣,一定是奇數!其次,其次!!欲哭無淚丫……5/2 == 2,5%2 == 1,這個結果是絕對的!但是對於 -5/2 == ? -5%2 == ? 上,標準是沒有規定的,於是又出現一個 undefined behaviour! 一般的實現是,模運算的結果要和被除數一致,然後保證 (a/b)*b + (a%b) == a,所以-5%2 == -1,-5/2 == -2,同時 -5 >> 1 == -3,於是乎 F-G = 1。me 死的心都有了,O__O"…

  12. 3*4 的方格,有多少個長方形?( 5 分 )
    A. 18
    B. 20
    C. 40
    D. 60
    E. 上面都不對

    分析:高中數學題目,O__O"…(本來想解釋一下的,但是趕腳麼必要丫,公式 C(2,4) * C(2,5) = 6*10 = 60,橫向取 2 條線,縱向取 2 條線,就是一個長方形。)

  13. 一個直線將一個平面分成 2 部分,兩條直線分成 4 部分,如果直線不平行,多條直線不共一點,問 100 條直線將平面分成幾部分?( 5 分 )
    A. 5051
    B. 5053
    C. 5510
    D. 5511

    分析:小學數學題目,O__O"…(公式:1+1+2+3+4+...+n=1+(n+1)n/2 = 1+5050 = 5051)

  14. 下面哪些是穩定排序:( 5 分 )
    A. 冒泡兒排序
    B. 快速排序
    C. 堆排序
    D. 歸併排序
    E. 選擇排序

    分析:略。

  15. Web 應用程式中常使用 MVC 模式,關於說法下面哪些是對的?( 5 分 )
    A. 模型 ( Model )表示資料以及處理資料的業務邏輯
    B. 檢視 ( View ) 是對模型的(視覺化)展示,它渲染模型的結果,典型的是一個使用者介面元素(user interface element)
    C. 控制器介於使用者和系統之間,它接受使用者的輸入,指揮著模型和檢視來完成輸入對應的任務

    D. MVC 的常用實踐是,模型從使用者接收 GET 和 POST 的請求,然後決定做神馬,通過移交給控制器和檢視
    E. 上面都不對

    分析:MVC 貌似就是 ABC 的說法。

  16. 根據下面哪些可以確定一棵二叉樹?( 5 分 )
    A. 前序遍歷和中序遍歷
    B. 前序遍歷和後序遍歷
    C. 中序遍歷和後序遍歷
    D. 後序遍歷

    分析:至少要一箇中序遍歷,前序+後序遍歷不中。

  17. n 個字元構成的字串,假設每個字元都不一樣,問有多少個子串?( 5 分 )
    A. n+1
    B. n^2
    C. n(n+1)/2
    D. 2^n-1
    E. n!

    分析:介個,貌似也簡單,長度為 1 的字串 n 個,長度為 2 的 n-1 個,長度為 3 的 n-2 個,...,長度為 n 的 1 個,然後 n+(n-1)+(n-2)+...+1 = ?。

  18. 根據下面給的表和 SQL 語句,問執行 SQL 語句更新多少條資料?( 5 分 )
    sql 語句:
        update Books set NumberOfCopies = NumberOfCopies + 1 where AuthorID in
        select AuthorID from Books
        group by AuthorID
        having sum(NumberOfCopies) <= 8 
    
    表中資料:
    BookID        Tittle              Category               NumberOfCopies             AuthorID
    1           SQL Server 2008         MS                            3                    1
    2           SharePoint 2007         MS                            2                    2
    3           SharePoint 2010         MS                            4                    2
    5           DB2                     IBM                           10                   3
    7           SQL Server 2012         MS                            6                    1
    

    A. 1 B. 2 C. 3 D. 4 E. 5

    分析:不多說,SQL 語句執行。

  19. 下圖中從 S 到 T 的最短路徑是多少?(邊上是連線點的長度):( 13 分 )



    A. 17
    B. 18
    C. 19
    D. 20
    E. 21

    分析:從前向後找最短路徑,先是 A1、A2、A3,然後 B1、B2,其次 C1、C2,最後 T 。

  20. N個球中有一個假冒偽劣(重量不足),如果給你一個天平允許你測 3 次找出那個假冒偽劣,問 N 可能的值?( 13 分 )
    A. 12
    B. 16.
    C. 20
    D. 24

    E. 28

    分析:3 個一次可以測出來,3*3 = 9 個以內 2 次,3*3*3 = 27 個以內,3次!所以,有個公式:n 次可以測出來 3^n 以內的假冒偽劣,至於怎麼測,方法都一樣,平均分成三墩,然後,略。

題目簡單分析:

  1. C 語言 3 道:5、10、11:++ 運算子、字串指標、按位運算;(各種 bug 程式!)
  2. C++ 語言 3 道:2、7、8:多型、const 關鍵字、const 和指標、POD;
  3. Java/C# 語言 1 道:6:多維陣列;
  4. 資料結構 5 道:3、14、16、17、19:連結串列和陣列、穩定排序、二叉樹、字串、最短路徑;
  5. Windows 程式設計 1 道:1:函式修飾符;
  6. 作業系統 1 道:4:執行緒和程序;
  7. 設計模式 1 道:15:MVC 模式;
  8. 資料庫 1 道:18:sql 語句;
  9. 數學 2 道:12、13:組合數學;
  10. 智力題 2 道:9、20:二進位制、等比數列;

分值估計

下面是 me 的分值估計,最佳估計,就是將那些比較肯定的暫時米有發現有問題的,就看成是“完全正確”;大致估計,將有些拿不準的但是現在沒有發現錯誤的,化作“半對”;最壞估計,將某些可能錯的(和其他人想法有出入),就化為“錯誤”,但是比較肯定的還是算做“完全正確”。分值列出來,原來自己的水平就是那樣丫!希望儘可能滴接近實際情況:

最佳估計:0 + 3 + 3 + 2 - 2 + 3 + 3 + 0 - 3 + 5 + 3 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 13 + 7 = 72
大致估計:0 + 3 + 2 + 2 - 2 + 3 + 3 + 0 - 3 + 3 + 3 + 5 + 5 + 5 + 3 + 5 + 5 + 5 + 13 + 7 = 67
最差估計:0 + 3 - 2 + 2 - 2 + 3 + 3 + 0 - 3 + 3 - 3 + 5 + 5 + 5 - 3 + 5 + 5 + 5 + 13 + 7 = 51

相關推薦

2013微軟實習生招聘筆試題目(c/c++多少?)

今天本是清明放假,但是,但是微軟就是在今天下午組織了筆試考試,據說是全國統考。75分鐘,20 道選擇題,問題是,問題是神馬?先看下簡單的評分: 1-8 3 2 -2 0 9-18 5 3 -3 0 19-20 13 7 -7

一份C++實習生筆試題目

一、基礎知識1、 下面幾個是在程式設計領域裡經常使用的縮寫,請寫出他們的英文全寫,並翻譯成中文。注意是程式設計領域.(1) OS  operating system 作業系統或者是open source 開發原始碼(2) VSVisual Studio軟體開發平臺(3) MS  Microsoft 微軟的縮

騰訊2014實習生招聘筆試面試經歷

今天上午騰訊二面,走出來了的時候,就預感到Game Over了。能走到這一步,已經知足了,內心還是非常感謝騰訊給予的這次面試機會。 騰訊筆試那天,整個考場就烏壓壓的一片人。畢竟是大公司,應聘的人特別多。筆試的時候,大家都挨著一起做的,生平筆試還是第一次緊挨著筆試的。其實也無

AVL樹(考研的同學需要注意其定義)的判定(某公司2012校園招聘筆試題目

       平衡二叉樹又叫AVL(人名的簡稱)樹,在不同的教材中,對AVL樹的定義是不同的。考研指定的教材是嚴奶奶編寫的教材,我們來看看該書上(P233)是如何定義的:        AVL樹或者是一棵空樹,或者滿足以下條件:       (1). 其左子樹和右子樹都為A

2018網易遊戲雷火盤古實習生招聘筆試真題

2月15號參加的網易遊戲實習線上筆試(內推),以為會考小題的,背了一天計算機網路和作業系統,結果拿到題只有4道程式設計大題,囧~如果沒有一點演算法競賽的知識,想拿下來還是挺困難的。(網易遊戲應該算國內筆試很難的了) 1.字串編碼 輸入描述: 每個測試輸入包含1

2017網易遊戲雷火盤古實習生招聘筆試真題

1.給定一個字串,請你將字串重新編碼,將連續的字元替換成“連續出現的個數+字元”。比如字串AAAABCCDAA會被編碼成4A1B2C1D2A。 #include<stdio.h> #include<string.h> char s[

優酷土豆2014校園招聘筆試題目之Java開發類

先總體說下題型,共有20道選擇題,4道簡答題,3道程式設計題和1道擴充套件題,題目都比較簡單,限時一小時完成。 一、選擇題 選擇題非常簡單,都是基礎題,什麼死鎖發生的條件、HashMap和HashSet查詢插入刪除的時間複雜度、Thread類和Runnable介面、排序複雜度比較、建堆調整堆等等,具體的也

華為2018屆校園招聘筆試題目以及相應程式碼分享 軟體開發崗位

華為2018屆校園招聘筆試 時間20170712 筆試題目 01 括號匹配 //01 括號匹配 #define _CRT_SECURE_NO_WARNINGS /* 括號匹配 給定一個字串,裡邊可能包含“()”、“[]”、“{}”三種括號,請編寫程式檢查該字串中的括號是

2015嵌入式軟體崗位筆試題目總結

2015年嵌入式軟體試題1、下面函式用於列印傳入的引數,比如:print_cpu_util(10000,"xx");print_cpu_util(3333,"xy");輸出的效果是:100.0 %  xx33.33 %  xy請完成下面程式碼空格部分#define COL_M

網易2019實習生招聘筆試-數對

牛牛以前在老師那裡得到了一個正整數數對(x, y), 牛牛忘記他們具體是多少了。但是牛牛記得老師告訴過他x和y均不大於n, 並且x除以y的餘數大於等於k。牛牛希望你能幫他計算一共有多少個可能的數對。輸入描述:輸入包括兩個正整數n,k(1 <= n <= 10^5,

騰訊2017暑假實習生招聘筆試程式設計題(1)

演算法基礎-字元移位 小Q最近遇到了一個難題:把一個字串的大寫字母放到字串的後面,各個字元的相對位置不變,且不能申請額外的空間。 你能幫幫小Q嗎? 輸入描述: 輸入資料有多組,每組包含一個字串s,且保證:1<=s.length<=10

搜狗2013校園招聘研發類筆試試卷之C/C++類

#include <iostream> using namespace std; class Base { public: Base(int j) : i(j) {} virtual ~Base() {} void func1() {

【LeetCode】Longest Palindromic Substring && 【九度】題目1528:最長迴文子串(騰訊2013實習生招聘二面面試題)

         Longest Palindromic Substring          Total Accepted: 4808 Total Submissions: 23151 My Submissions         Given a string S, fi

201812月位元組跳動實習生校招筆試題目

2018年12月位元組跳動實習生校招筆試題目總結 這次筆試只有三道題目,先要求寫出解題思路,然後再寫出程式碼 筆試時間為:1個半小時 1.給出一個年月日,判斷該天是當年的第幾天 水題 注意判斷leap year,(year%4==0 &&

微軟2017預科生計劃線上程式設計筆試 題目1 : Legendary Items

描述 Little Hi is playing a video game. Each time he accomplishes a quest in the game, Little Hi has a chance to get a legendary item. At the beginning the

2013第四屆藍橋杯B組(C/C++)預賽題目及個人答案(歡迎指正)

第一題: 題目標題: 高斯日記     大數學家高斯有個好習慣:無論如何都要記日記。     他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210     後來人們知道,

輸入阿拉伯數字(整數),輸出相應的中文(美團網20149月16日筆試題目之中的一個)

++i 方式 data ++ name int end == pri 2014年9月16日,美團網南京筆試題之中的一個。原要求是輸入整數的位數最多為四位。這裏擴展為12為,即最高到千億級別。 思路及步驟: 1 判別輸入是否合法,並過濾字符串最前面的‘0’。 2 將字符串

201310月微軟MVP當選名單揭曉

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

網易2018實習生招聘筆試題-C++開發實習生演算法題

[程式設計題] 被3整除 時間限制:1秒 空間限制:32768K 小Q得到一個神奇的數列: 1, 12, 123,...12345678910,1234567891011...。並且小Q對於能否被3整除這個性質很感興趣。小Q現在希望你能幫他計算一下從數列的第l個到第r個(包含端點)有多少

2018-09-09(同花順2017筆試題目總結)

1:常用的客戶區滑鼠訊息有哪些? 滑鼠訊息分為三類: 命中測試訊息 客戶區滑鼠訊息 非客戶區滑鼠訊息 客戶區滑鼠資訊(10個): 左:WM_LBUTTONDOWN WM_LBUTTONUP WM_