2015屆[2023年夏]華為公司校招機試中級題試水
當前華為公司的一次機試。共三道不同難度的程式設計題(當中,0基礎題60分、中級題100分、高階題160分),機試成績》=60就可以參加下一輪面試。
一定程度上說。僅僅要全然做對0基礎題,就行通過機試的考驗。可是,可以部分或全然完畢後面的中高階題,一定會為你後面的面試增色不少。
寫作本文的目的有兩個。一是對本次參加的華為公司機試做個整理和小結。屬於自我提公升;二是讓各位求職的應屆生同道可以直觀體驗當前一般的機試題大概是何種型別,難度又有幾分,屬於經驗分享。因為僅僅是作為體驗而非試題彙總,所以本文僅僅列舉了我以及我的小夥伴們遇到的幾次機試中的中級題。並不做很多其它的收集。
每道題包含題目詳情、程式設計思路、**實現三部分。
描寫敘述:
輸入乙個單向鍊錶,將鍊錶逆序後輸出各結點的值。
鍊錶結點結構定義例如以下:
typedef struct taglistnode
listnode;
執行時間限制:
60 sec
記憶體限制
256 mbyte
輸入: 順序輸入鍊錶的各結點,用逗號(",")作為結點資料的分隔符;
比如:鍊錶1->2->3->4->5,輸入為:"1,2,3,4,5"
輸出:逆序後鍊錶的各結點,用逗號(",")作為結點資料的分隔符;
比如上述鍊錶逆序後為5->4->3->2->1。輸出為:"5,4,3,2,1"
例子輸入:
1,2,3,4,5
例子輸出:
5,4,3,2,1
程式設計思路:
遍歷原鍊錶,對每乙個結點:記錄前乙個被遍歷的結點(即其前驅結點,需額外開闢空間)、當前結點、當前結點的後繼;令當前結點的前驅結點變為其後繼結點。當前結點的後繼結點變為新的當前結點。對鍊錶的第乙個和最後乙個結點特殊處理。
**實現:
#include #include // 鍊錶結點結構
typedef struct taglistnode
listnode;
// 建立乙個新的鍊錶結點
//引數 ppstnode,指向新結點指標的指標
//引數 nvalue, 新結點的值(整數形式)
void new_node_create(listnode **ppstnode, int nvalue)
// 建立乙個新的鍊錶結點並將其附加到指定鍊錶的尾部
//引數 ppsttail,指向鍊錶最後乙個結點指標的指標
//引數 pvalue, 新結點的值(字串形式)
// 依據標準輸入的內容建立鍊錶
//引數 ppsttail,指向煉表頭結點的指標的指標
void list_create(listnode **ppsthead)
}// 對最後乙個無逗號結尾的結點單獨處理
}// 鍊錶逆置
//引數 ppsttail。指向煉表頭結點的指標的指標
void list_reverse(listnode **ppsthead)
(*ppsthead)->next = pstprev; //原單鏈表的最後乙個結點變為逆置後的第乙個結點,亦即頭結點的後繼結點
}// 鍊錶元素遍歷列印
//引數 ppsttail,指向煉表頭結點的指標的指標
void list_print(listnode **ppsthead)
printf("%d", pstnow->value); //最後乙個結點後木有逗號
}// 鍊錶釋放
//引數 ppsttail。指向煉表頭結點的指標的指標
void list_free(listnode **ppsthead)
}int main(void)
描寫敘述:
在某相親節目現場。有n(1≤n≤500)對善男俊女,為測試男女兩方心有靈犀程度,主持人想出了乙個非常有意思的遊戲:主持人在地上畫出一排(共2n個)格仔,每乙個格仔裡都寫著乙個整數ai(1≤ai≤500)。遊戲開始後,讓他們隨意地站成一排(可能會有兩個人站在了同乙個格仔裡)。等他們都站好以後,司儀開始計算他們每乙個人自己的得分,記分規則是:男方的分數等於把從自己所站的位置開始一直累加到開頭。女方的分數等於從自己所站位置開始一直累加到末尾。假設某一對男女的得分數是同樣的,那他們得默契度較高,比較有緣,交友成功率也高。
比方,有3對男女,地上的那一排數字為:3,6,2。4,5,2。假設男方站在第三個位置(2),他的得分為:3+6+2=11。女方站在第4個位置(4),她的得分為4+5+2=11。兩人得分同樣,就覺得兩人非常有默契。或者男方站第6個位置(2)。女方站第1個位置(3),他們的得分都等於22。也非常有默契。假設你朋友在節目現場。那麼請你幫他/她算一算有多少種站法能夠迅速有機會找到那個默契的她/他(引數不合法返回-1)。
執行時間限制:
無限制記憶體限制
無限制輸入:
第一行乙個整數n,代表善男信女的對數。
第二行有一批整數n
。代表地上的數字。注意:假設n不等於2*n,輸出-1。
輸出:輸出共同擁有幾種站法。
輸入資料不合法,輸出-1。
例子輸入:
33 6 2 4 5 2
例子輸出:2
程式設計思路:
我理解的題意。是算一對男女的默契度。
依據題意,男方和女方都有可能出如今2n
個格仔的隨意乙個中。
先分別窮舉計算男/女方在這2n
個格仔中的隨意乙個格仔時。他/她的得分;然後用乙個雙重迴圈。外迴圈遍歷男方的2n個可能的位置,內迴圈遍歷女方的2n個可能的位置。當男女兩方的得分同樣時,可能的站法計數加一。
**實現:
#include #include #include #define lattice_max_num 1000
// 計算男方站在某格仔上時的分數
int score_calc_man(int *platticelist, int npos)
// 計算女方站在某格仔上時的分數
int score_calc_lady(int *platticelist, int npos, int nlistszie)
// 讀入格仔裡的數值
fflush(stdin); //務必清空輸入緩衝區。否則後面的fgets,gets會直接獲取前乙個scanf遺留的換行符。而不會又一次等待輸入
fgets(szinput, sizeof(szinput), stdin); //用 gets(szinput) 面臨溢位的危急
ptemp = szinput;
nlistszie = 0;
for(i=0; szinput[i]!='\0'; i++)
nlatticelist[nlistszie++] = ntemp;
ptemp = szinput+i+1;
} }ntemp = atoi(ptemp);
if (ntemp<1 || ntemp>500) // 輸入合法性判定。1≤ai≤500
nlatticelist[nlistszie++] = ntemp;
if(nlistszie != ncouplecount*2) // 輸入合法性判定,n等於2*n
printf("%d", privity_calc(nlatticelist, nlistszie));
return 0;
}
描寫敘述:
精靈王子愛好冒險,在一次探險歷程中。他進入了乙個神奇的山洞。在洞穴深處,精靈王子不小心觸動了洞穴內暗藏的機關,整個洞穴將非常快塌陷,精靈王子必須盡快逃離洞穴。
精靈王子的跑步速度為17m/s,以這種速度可能是無法逃出洞穴的。慶幸的是精靈王子擁有閃爍法術,可在1s內移動60m。只是每次使用閃爍法術都會消耗魔法值10點。精靈王子的魔法值恢復的速度為4點/s。僅僅有處在原地歇息狀態時才幹恢復。
如今已知精靈王子的魔法初值m,他所在洞穴中的位置與洞穴出口之間的距離s,距離洞穴塌陷的時間t。
你的任務是寫乙個程式幫助精靈王子計算怎樣在最短的時間內逃離洞穴。
若能逃出,輸出"yes",並輸出逃出所用的最短時間。若不能逃出。則輸出"no",同一時候輸出精靈王子在剩下的時間內能走的最遠距離。注意字母大寫和小寫。注意:精靈王子跑步、閃爍或歇息活動均以秒(s)為單位。且每次活動的持續時間為整數秒。距離的單位為公尺(m)。
執行時間限制:
無限制記憶體限制
無限制輸入: ms
t 輸出: yes 逃出洞穴所用的最短時間
或no 在洞穴塌陷前能逃跑的最遠距離
例子輸入:
1050
5例子輸出:
yes 1
程式設計思路:
貪心思想,每一秒都選擇能夠走最遠的距離的方法。所以我們每次採用兩種方法來前進。最後選擇能走最遠的那個方法。
**實現:
可參見:
2015 華為 校招回憶錄 篇 上
本文由csdn 蚍蜉撼青松 主頁 當前華為公司的一次機試,共三道不同難度的程式設計題 其中,初級題60分 中級題100分 高階題160分 機試成績 60即可參加下一輪面試。一定程度上說,只要完全做對初級題,就可以通過機試的考驗。當然,這樣的通過肯定不太利於後面的面試。寫作本文的目的有兩個,一是對本次...
2017校招 回文序列
2017校招 回文序列 如果乙個數字序列逆置之後跟原序列是一樣的就稱這樣的數字串行為回文序列。例如 是回文序列,不是回文序列。現在給出乙個數字序列,允許使用一種轉換操作 選擇任意兩個相鄰的數,然後從序列移除這兩個數,並用這兩個數字的和插入到這兩個數之前的位置 只插入乙個和 現在對於所給序列要求出最少...
Fire Air 華科校賽 網路賽
題目 在100000 10000的空地上,有n個時間點,每個時間點會在 xi,yi 上種一棵樹。定義綠色 被樹包圍的空地的個數。問每個時間點之後綠色為多少。如圖 思路 逆向求解,從 0,0 位置將圈外的全標記 給空地加一圈 在分別考慮當前的樹,是在圈內還是圈的外圍。由於vis是全域性陣列,之後的bf...