猿輔導-2019-校招筆試

猿輔導 2019 校招技術筆試題總結

1.猿輔導公司某研發小組一共有 12 名同學,其中 9 人能做後端開發,6 人能做前端開發。現在要抽調 4 名同學成立項目小組,負責公司的一項“機密”項目。其中 2 名同學做後端開發,2 名同學做前端開發。有多少種選派方法?

解答:

 

 

2.猿輔導公司某部門月會上,有 5 名同學在依次領取入職週年的禮物,一束鮮花。HR 共準備有 5 種不同顏色的鮮花供他們挑選。則有且僅有兩名同學挑選了相同顏色的鮮花的概率是多少?

解答共有5*5*5*5*5=3125種情況,再算有且只有兩個人選同一種顏色的情況, 1.選出兩個人C52=10; 2.選同一種顏色有5種情況; 3.其他3個人從剩下4種顏色選:4*3*2=24. 共有10*5*24=1200 概率爲1200/3125=48/125.

 

 

3.某天猿輔導 HR 組織大家去漂流,早上,參加團建的同學都到齊了,並且按到達公司的先後順序排好隊了。 由於員工太多,一個大巴車坐不下,需要分多個車,車是足夠的,但所有人需要按一定順序上車,按如下規則安排上車的順序:

假設大巴車容量爲 m,從隊首開始,每 m 個人分成一個小組,每個小組坐一輛車。同時只有一個車打開車門供員工上車。 小組之間按從隊尾到隊首順序依次上車,同一小組內先到的同學先上,求所有人上車的順序。

 

例如: 員工數 8, 車容量 3, 員工到達順序爲 1 2 3 4 5 6 7 8, 3個人一個小組,分三個小組, 小組一: 1, 2, 3, 小組二: 4, 5, 6,小組三: 7,8。 小組上車順序爲: 小組三,小組二,小組一 。 所有員工上車順序爲 7 8 4 5 6 1 2 3

 

方案1:將原輸入分爲幾個小組,然後依次輸出,使用vector<vector<int>> 來保存。

#include <iostream>

#include <vector>

 

using namespace std;

 

int main(){

    int mCount, cCount;

    cin >> mCount;

    cin >> cCount;

 

    vector<int> member;

    for (int i = 0; i<mCount; i++){

        int t;

        cin >> t;

        member.push_back(t);

    }

 

    vector<vector<int>> result;

   int length= mCount/cCaption;   //大巴的數量

    if(mCount % cCaption){

        length++;

    }

    for (int i = 0; i<length; i++){

        int j;

        vector<int> tmp;  //爲局部變量

        for (j = 0; j<cCount; j++){

            if (i*cCount + j < mCount){

            tmp.push_back(member[i*cCount + j]);

            }

        }

         

        result.push_back(tmp);

    }

 

    for (int i = result.size()-1; i >= 0; i--){

        for (int j = 0; j<result[i].size(); j++){

            cout << result[i][j] << " ";

        }

    }

 

    return 0;

}

 

方案2:

  比如 員工到達順序爲 1 2 3 4 5 6 7 8車容量爲3個人所以是3組現在數組存的就是 int[] ps={1 2 3 4 5 6 7 8};
     分爲三組的情況下:
     第一組123第二組456第三組78
     所以只需將每一組中的設置兩個標識位begin和end,
     然後將begin和end值互換即可
     比如第一組123,開始時begin=0,end=2,然後將ps[0]和ps[2]互換
     然後再將begin++,end--。
     互換的次數就有每一組的數量來決定=每一組的數量/2
     最終每一組互換之後就會得到3 2 1 6 5 4 8 7只需再倒序輸出即可

#include <iostream>

#include <vector>

 

using namespace std;

 

int main(){

    int mCount,cCaption;

    cin>>mCount;

    cin>>cCaption;

    vector<int> member;

    for(int i=0;i<mCount;i++){

        int tmp;

        cin>>tmp;

        member.push_back(tmp);

    }

     

    int cCount = mCount/cCaption;

    if(mCount % cCaption){

        cCount++;

    }

     

    for(int i=0;i<cCount;i++){

        int begin = i*cCaption;

        int end = begin + cCaption -1;

        if(end >= mCount){

            end = mCount-1;

        }

        while(begin < end){

            int tmp = member[begin];

            member[begin] = member[end];

            member[end] = tmp;

            begin++;

            end--;

        }

    }

     

    for(int i=mCount-1;i>=0;i--){

        cout<<member[i]<<" ";

    }

    cout<<endl;

     

    return 0;

}

 

 

 

 

 

 

 

4.拍照隊形

猿輔導公司的 N位(N>=4)研發同學組織了一次秋遊活動,某同學帶了個無人機在高空拍照,活動結束時,先拍了一張所有同學排成公司猴頭Logo的照片, 接着有人提議再排成“猿”的首字母Y字形來拍一張合照。

 

用字符串中的每一個字符(不是換行符或結束符'\0')代表一位老師,輸出排好後的隊形。要求 Y字除去中心點外,上下半部分等高,按照從左到右,從上到下進行排序。隊形中沒人的部分用空格佔位。

輸入數據保證可以排出一個完整的Y字,即長度爲 3k+1 (k>=1) 

 

例如: 7個 x ,排成隊形爲(爲了方便說明,這裏用‘-’代替空格):

x---x

-x-x

--x

--x

--x

 

方案:

k的值就是標誌Y的兩個部分的分界線,我們要做的就是分兩個部分進行打印,上半部分(行數=k)和下半部分(行數=k+1).
首先看上半部分:
  上半部分的輸出其實就是首先是每一行的第一個x前面輸出a個空格,再輸出x,然後中間去輸出b個空格,再輸出x;關鍵就是我們去確定a和b;大家可以看上面的找出規律,每一行每一行的第一個x前面輸出a個空格a=i(i爲當前每行的行數,從0開始);中間去輸出b個空格,這個b=2*(k-i)-1(i爲當前每行的行數,從0開始);之後再輸出a個空格。
  下半部分直接就是打印每一行的第一個i前面輸出a個空格,這個a=k

 

 

 

 

#include <iostream>

#include <string>

using namespace std;

 

void printN(int num){

    for(int i=0;i<num;i++){

        cout<<" ";

    }

}

 

 

int main(){

    int N;

    cin>>N;

    getchar();  //清空緩衝區的回車

    string str;

    getline(cin,str);

    int k = (N-1)/3;

    int top = k;

    int below = k+1;

     

    int index = 0;

    for(int i=0;i<top;i++){

        printN(i);

        cout<<str[index++];

        printN(2*(k-i) - 1);

        cout<<str[index++];

        printN(i);

        cout<<endl;

    }

     

    for(int i=0;i<below;i++){

        printN(k);

        cout<<str[index++]<<endl;

    }

     

     

     

     

    return 0;

}

參考鏈接:

https://www.nowcoder.com/questionTerminal/1b1f87ef6e7d40529d82c96aef79e8a4

https://www.nowcoder.com/test/question/done?tid=26316130&qid=309673#summary

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章