華為2016暑假實習機試題

2021-07-11 16:47:55 字數 2767 閱讀 5552

華為技術崗上機測試有三道程式設計題,總體難度偏簡單,題目的質量一般。我指的一般,並不是說難度不高就代表不好,只是hw機試題部分題目說得比較模糊,有歧義,以至於我和同學後面討論的時候發現他原先bug百出的**也照樣能ac全部testcase。

第一題、字串處理

最簡單的做法就是無需考慮輸入要求,直接把兩個變數當作一行資料儲存,然後將其中的大寫字元輸出。

#include #include using namespace std;

int main()

第二題、排序

直接排序,然後輸出的時候加入當前元素與上乙個元素不同時,才輸出該元素。感覺hw的機試有點點小坑就在這裡,以往做oj題,基本都是multiple case直至自己用ctrl+z終止程式,於是這道題也是這樣的做法,但發現最後乙個測試用例總是過不了,最後修改一下用只有一次測試用例的做法,ac了。

#include using namespace std;

int cmp(const void* a, const void* b)

int main()

int* arr = new int[n];

for (i = 0; i < n; ++i)

cin >> arr[i];

qsort(arr, n, sizeof(int), cmp);

cout << arr[0];

for (i = 1; i < n; ++i)

if (arr[i] != arr[i - 1])

cout << " " << arr[i];

}

第三題、樹

前面兩道題都是在幾分鐘內可以搞定的,這道題比較花時間。通過分析,題目中每一層如果有多個節點都是按照從左到右排布,雖然不是完全二叉樹,但是可以看成是完全二叉樹通過剪枝得到,因此完全二叉樹的所有性質完全符合。我自己的第一種做法是通過建樹,然後按照要求輸出結果。

#include #include using namespace std;

struct treenode

; treenode(char val)

};void buildtree(treenode*, int);

int finddepth(treenode*, char);

int getdepth(treenode*);

int max(int , int);

int main()

treenode* trees[512] = ; // 最大層數為9層

int offset[9] = ;

// 初始化樹節點

for (int i = 0; i < len - 1; ++i)

// 建樹

buildtree(trees, maxlevel);

// 輸出每個節點的深度

int test = nodes.size();

for (int i = 0; i < test - 1; ++i)

cout << finddepth(trees, nodes[test - 1]) << endl;

}void buildtree(treenode* root, int maxlevel) }}

int max(int a, int b)

int getdepth(treenode* root)

int finddepth(treenode* root, char ch)

上面的**比如冗餘,後來跟同學討論之後了解到,可以不通過建樹來得到節點深度的,或者說用更簡單的方式來保留樹的結構。依題意,由於乙個節點的深度只能從左兒子的深度+1得到,因此可以忽略右兒子情況。另外由於樹是完全二叉樹的乙個剪枝版,節點和左右兒子節點之間的對應關係還在,即假設節點的下標為n,左右兒子的下標分別為2n+1和2n+2,因此如果某一層的節點下標為n,則如果對應的下一層中下標為2n-1為空,則表示無左兒子,也即肯定無右兒子。按照交流後的思路,我code如下,不過沒有測試過hw的測試用例,只是自己測試過,不能保證完全正確。

#include #include using namespace std;

int main() ; // 記錄每個節點在所在層的位置,從1計起

int numperlvl[11] = ; // 記錄每一層的節點數,最大層數不超過9層,且層數從1計起

int len = str.size();

int tlen = testcase.size();

for (int i = 0; i < len - 1; i += 2)

for (int i = 0; i < tlen; ++i)

int depth = 1;

int level = lvl[testcase[i]];

int childnum = lvlpos[testcase[i]];

for (int k = lvl[testcase[i]]; k < 10; ++k)

else

} cout << depth << endl;

}}

京東2016暑假實習機試題(部分)

因為沒有提前上測試平台,沒看清楚機試要求,不知道可不可以切屏到ide上程式設計,所以整晚所有程式設計題都是在京東的oj上做的,本來很簡單的題,知道可以用那些思路但是因為不熟模板或者庫函式的使用變得舉步維艱,結束後自己碼一下發現是很簡單的。當時只拍了一道題,為了避開色相頭,拍的角度也不好,將就看吧。分...

華為2016機試題

輸入一串用空格隔開的數字串,對於數字串的奇數字按公升序排序,偶數字按降序排序.示例輸入 4 6 2 3 6 7 8 1 處理過程 奇數字 4 2 6 8 公升序排序結果 2 4 6 8 偶數字 6 3 7 1 降序排序結果 7 6 3 1 include include using namespac...

華為2016機試題目

昨天去華為南研機試 故地重遊 沒啥感慨 題目很簡單 第一題 輸入乙個字串,輸出其中字母 數字 空格 其他字元的個數 輸入乙個字元之後 直接比較就行 邊界條件 也就是判斷是否為空 核心 如下 void countnumber char str,int numofletter,int numofnumb...