大師兄教你如何過華為機試_第1頁
大師兄教你如何過華為機試_第2頁
大師兄教你如何過華為機試_第3頁
大師兄教你如何過華為機試_第4頁
大師兄教你如何過華為機試_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、大師兄教你如何過華為機試寶典1內(nèi)功心法大華為這個大數(shù)據(jù)時代土豪金海量式的招聘又要開始了!近期聽說大華為的校招機試馬上就要開始了,由于華為軟件崗位的招聘只有技術(shù)面跟機試是與技術(shù)有關(guān)的內(nèi)容,所以機試的地位非常重要。對于機試,除了長期積累的軟件基本功以外,還有很多可以短期訓(xùn)練的東西,類似于考試之前的突擊,可以迅速提高機試成績,就像在我西電大楊老師考前最后一堂課一定要去,那個重點就是考點阿。這篇機試葵花寶典的內(nèi)容是針對華為軟件類上機準(zhǔn)備的,如果你認(rèn)真看了本寶典,如果你是真正通過自己能力考上西電的話,想不過都難。同樣想拿高級題的同學(xué),請移步對于機試,首先應(yīng)該調(diào)整好自己的心態(tài),不要覺得寫程序很難,機試題很

2、難,也不要去考慮,萬一機試考到自己不會的內(nèi)容怎么辦,要相信,機試題永遠(yuǎn)是考察每個人的基礎(chǔ),基礎(chǔ)是不會考的很偏的,會有人恰好做過某個題而做出來那個題,但不會有人恰好沒做過一個題而做不出來那個題。機試之前,應(yīng)該做的準(zhǔn)備有:1、 買一本算法競賽入門經(jīng)典,這本書不同于普通的算法或者編程語言的書籍,這本書既講語言,又講算法,由淺入深,講的很好,能看完前幾章并且把例題都做會,想通過機試就很簡單了2、 調(diào)整好心態(tài),時刻告訴自己,哪些小錯誤是自己以前經(jīng)常犯的,最好用筆記本記錄下來,寫每道題前再看一遍,如果遇到代碼調(diào)不出來了,先想想自己是否犯過以前那些錯誤。還有就是,看了題目以后,先仔細(xì)想清楚細(xì)節(jié),在紙上寫清楚

3、自己需要用到的變量,以及代碼的基本框架,不要急于動手去寫代碼3、 不要懼怕任何一道看起來很難的題目,有不會的就去問身邊會的人,讓別人給自己講清楚4、 心中默念10遍C+跟C除了多了兩個加號其實沒有區(qū)別,會C就能上手C+5、 大量的練習(xí)是必要且有效的6、 看完這篇寶典,預(yù)過機試、必練此功。在這里推薦一個帖子,是機試歸來的學(xué)長寫的,寫的很不錯,里面的例題在后面的攻略中也會提及, 就在好網(wǎng)上。寶典二:常用招式1:機試常用變量類型CC+常用的變量類型有很多種,想通過機試,掌握好其中的幾種就可以,他們分別是int,double, string, charint 類型是最常用的整數(shù)類型,對于輸入類型是整形

4、的變量,使用int來進(jìn)行定義和讀入。還有一種更大的整形變量是long long,在機試中一般不會涉及到考察,如果考慮到運算的過程中有可能超過int的大小,再考慮使用long long,int最大可以到達(dá)231級別,long long最大可以到達(dá)263。PS:有時機試讀入多個整數(shù)的時候會是這樣的形式5,10中間有一個逗號,在這種情況下,其實讀入也是很簡單的,可以這么寫:scanf(“%d%c%d”,&a,&b,&c);或者是:scanf(“%d”,&a);getchar();scanf(“%d”,&c);有的機試題會說:兩個整數(shù)之間有若干個空格符或tab字

5、符。在這種情況下,讀入的方式還是使用scanf(“%d%d”,&a,&b)這樣,scanf函數(shù)或者cin函數(shù)都可以很好的吃掉除了數(shù)字字符以外的字符。double類型是最常用的浮點數(shù)類型,當(dāng)運算涉及到小數(shù)運算的時候,需要使用double來定義。其中,特別需要注意的一點是,如果使用了如下語句:double x=a/b;在這里,a和b是int,那么x的值將是a和b整除后的結(jié)果,而不是想要的結(jié)果,想要得到期望的結(jié)果,須改成double x=(a+0.0)/b;在這里,將a加上一個浮點數(shù),程序會在后臺將它強制轉(zhuǎn)換成一個double類型的數(shù)字,此時再除一個整數(shù),就沒有問題了string類型

6、是遇到字符串類問題應(yīng)該首選的變量,區(qū)別于字符數(shù)組char,string類型是直接將字符數(shù)組封裝了進(jìn)去,定義string s相當(dāng)于定義了一個大小特別長的字符數(shù)組。使用string的好處是,避免了使用char數(shù)組時定義數(shù)組長度過小導(dǎo)致越界,同時更加直觀的將字符串看做了一個對象。如果要定義一個string變量,首先得包含string的頭文件以及使用C+中的標(biāo)準(zhǔn)命名空間,標(biāo)準(zhǔn)命名空間這個東西,只要記得寫上就行,沒有任何影響。#include<iostream> /這一句是c+的頭文件,c語言代碼一樣可以把它包含進(jìn)來,只要將程序后綴名改成.cpp即可,其他都是一樣的。#include<

7、string.h>using namespace std;在不同的環(huán)境下,可能會有不同的頭文件包含了string的用法,可能的頭文件有cstring,string。在機試的環(huán)境中,一般使用string.h即可。定義一個string和定義其他變量方式相同:string s;讀入和輸出string也只需要使用cin>>s;cout<<s;這是比c語言的字符數(shù)組要簡單了很多的。需要注意的是,string類型讀入的時候與char數(shù)組的scanf讀入一樣,都是遇到空格符或者回車符就停止讀入,當(dāng)做一個完整字符串來處理,因此,使用string處理帶空格的字符串是不明智的,其他情

8、況下是都可以的。string變量包含了很多強大的功能,如:cpp view plaincopyprint?1. si;   /這么寫,返回的就是字符串s第i+1位的字符,返回的類型是char型,其中,s0是它的第一位,與字符串相同。   2. s.size();   /返回字符串的長度,返回的長度是l,則s從s0到sl-1表示的是其每一位的字符。   3. if (s1<s2) /兩個string是可以方便的使用大小于符號以及等于號來比較大小的,比較的方式是,從左向右按

9、位進(jìn)行比較,每一位按照字典序來比較。如”aaaa”<”abc”<”bcd”,但值得注意的一點是,比較的時候應(yīng)用變量進(jìn)行比較,即s1<s2這種,而不能用”aa”<”bb”這樣,如果要比較他倆的大小,應(yīng)這么寫:   4. s1="aa" s2="bb"  5. if (s1<s2)  string類型還有很多強大的功能,但是對于機試來說,會使用以上三種功能就足夠了。char50,char100這種字符數(shù)組與string類型很像,只不過他是C語言里面的

10、用法,對于機試,只建議在輸入帶有空格字符的字符串時使用char數(shù)組,使用的方式是:gets(s);在這里,gets函數(shù)區(qū)別于scanf函數(shù)的是,gets函數(shù)會直接將一整行讀進(jìn)來,而不會遇到空格就停下來。常見機試題類型初級題常見的類型無非就是字符串處理類的題目和數(shù)字處理類的題目,在這里歸結(jié)如下:1:字符串處理類字符串所有大寫轉(zhuǎn)小寫:1. for (int i=0;i<s.size();i+)  2.     if (si>=A && si<=Z)

11、0; 3.         si=si-A+a;  /si-A返回的是兩個大寫字母之間的差值,比如C與A的差值是2,這個差值是一個int類型,也可以直接提取出來使用。給這個差值再加上字母a,相當(dāng)于給a再往后推移二位,變成字母c。這種用法是字符串內(nèi)最普遍的一種用法,小寫轉(zhuǎn)大寫也是一樣。刪除滿足指定要求的字符后輸出:在機試中,判定對錯的方式是比較輸出的結(jié)果,而非檢查內(nèi)部的結(jié)果,因此,“刪除”對于機試來說,相當(dāng)于“不輸出”,也就是說,不需要調(diào)用s.erase()函數(shù),只需要在遇到被刪除的字符

12、時,跳過,不輸出即可。1. for (int i=0;i<s.size();i+)  2.   3.     if (si滿足刪除要求) 跳過;  4.         else 輸出si;  5.   倒轉(zhuǎn)字符串:與刪除字符串的思路類似,倒轉(zhuǎn)一個字符串,其實就是倒著輸出,只需要將循環(huán)反過來就可以。1. for 

13、(int i=s.size()-1;i>=0;i-)  字符串比較大?。喝绻容^的規(guī)則與字符串的比較規(guī)則相同,則直接使用s1>s2這種方式,如果規(guī)則不同,則用一重循環(huán)按位比較即可。2、數(shù)字處理類數(shù)字處理類的題目,最常見的兩種考察形式是整數(shù)拆分、進(jìn)制轉(zhuǎn)換和排序。整數(shù)拆分是指將一個整數(shù)拆分開每一位,比如123拆分成1,2,3。整數(shù)拆分的思路有兩種,第一種是直接用字符串讀入,然后把每一位用字符的形式提取出來:cpp view plaincopyprint?1. for (int i=0;i<s.size();i+) 

14、60;2. <span style="white-space:pre">    </span>numi=si-'0'  還有一種思路是不斷去除以10,把余數(shù)提取出來,方法是:cpp view plaincopyprint?1. while (n!=0)  2.   3. <span style="white-space:pre">    

15、;</span>numi=n%10;  4. <span style="white-space:pre">    </span>n=n/10;  5. <span style="white-space:pre">    </span>i+;  6.   進(jìn)制轉(zhuǎn)換:進(jìn)制轉(zhuǎn)換又分為10進(jìn)制轉(zhuǎn)換成別的進(jìn)制以及別的進(jìn)制轉(zhuǎn)換成1

16、0進(jìn)制,進(jìn)制轉(zhuǎn)換其實特別簡單,只需要記住如下代碼:10進(jìn)制轉(zhuǎn)換成X進(jìn)制cpp view plaincopyprint?1. while (n!=0)  2.   3. <span style="white-space:pre">    </span>numi=n%x;  4. <span style="white-space:pre">    <

17、/span>i+;  5. <span style="white-space:pre">    </span>n=n/x;  6.   X進(jìn)制轉(zhuǎn)換成10進(jìn)制cpp view plaincopyprint?1. for (int i=0;i<=length;i+)  2.   3. ans=ans*x+numi;  4.   其中,n

18、umi表示的是該x進(jìn)制數(shù)的每一位,比如一個二進(jìn)制數(shù)101,用這種轉(zhuǎn)換方式去轉(zhuǎn)換,ans的值從i=0到i=2處理后分別是1,2,5。排序:排序這個東西,其實不需要學(xué)習(xí)冒泡啊、快排啊之類的算法,應(yīng)對機試,C+中自帶的sort函數(shù)就可以很好的解決,請看下面一段代碼cpp view plaincopyprint?1. </pre><pre name="code" class="cpp">#include<iostream>  2. #include<algorithm>

19、60;/這個是包含sort函數(shù)的頭文件   3. using namespace std;  4. int arr100,n;  5. int cmp(int x,int y) /這個函數(shù)是sort函數(shù)比較兩個元素優(yōu)先級的函數(shù),在這里計算出兩個元素的優(yōu)先級,然后返回即可。   6.   7.     int importance1,importance2;  

20、;8.     /此處插入代碼計算x,y的重要性   9.     return importance1<importance2; /此處返回小于號,意思是優(yōu)先級小的在前,如return x<y;則數(shù)組會由小到大排序   10.   11. int main()  12.   13.     cin>>n;

21、0; 14.     for (int i=0;i<n;i+) cin>>arri;  15.     sort(arr,arr+n,cmp);  16.     return 0;  17.   這一段代碼的作用是讀入n個數(shù)字,然后按優(yōu)先級進(jìn)行排序,排序的比較方法在cmp函數(shù)中實現(xiàn),排序的具體過程不需要考慮。可以看到,其實只需要

22、記住sort函數(shù)的用法,要通過機試,排序算法是根本不需要學(xué)習(xí)的,so easy!總結(jié):機試中,掌握好int,double,string,char,還有數(shù)組,就足夠用了,但考察的內(nèi)容不僅僅是上述這些,想要通過機試,還是應(yīng)該多多練習(xí),多多學(xué)習(xí),不局限于上面所說的內(nèi)容寶典三:擂臺實戰(zhàn)首先推薦一個網(wǎng)站:很簡單:1031,1120,1122,1121,1103,1104,1281,簡單:1049,1181,1182,1279,1280,中等:1106,1108,1183,1288.難:1105,1282,1283,大家可以根據(jù)自己的水平去訓(xùn)練,其實里面的難題也是很簡單的,歸類到題庫中的話都屬于簡單題,只

23、要好好看書學(xué)習(xí)都是可以做出來的,下面放幾道例題,這些題都是機試很有可能考的題目,或者是非常類似的題目,已經(jīng)有了仔細(xì)的注釋,代碼寫的倉促1. 簡單題2. 題目描述 3. 輸入一個字符串,刪除其中所有的數(shù)字,所有大寫字母改成小寫,其他不變,并輸出 4.  5. 輸入描述 6. 一個字符串,保證沒有空格,以回車符結(jié)束,字符串長度<=20 7. 輸出描述 8. 一個字符串,為題目要求的結(jié)果 9.  10. 輸入樣例 11. aAbB13A 12. 輸出樣例 13. aabba 

24、14.  15. 解題思路:模擬題目要求即可,遇到數(shù)字就跳過不輸出,遇到大寫字母就改成小寫。  16.  17. */  18. #include<iostream>   19. #include<string.h>   20. using namespace std;  21. int main()  22.   23.     string

25、 s;  24.     cin>>s;  25.     for (int i=0;i<s.size();i+) /枚舉字符串的每一位    26.       27.         if (si>='0' 

26、;&& si<='9') continue; /遇到數(shù)字就跳過    28.         if (si>='A' && si<='Z') si=si-'A'+'a' /遇到大寫字母就改成小寫    29.    &#

27、160;    cout<<si;  30.       31.     cout<<endl;  32.   33. </span> 34. 簡單題 35. 題目描述 36. 輸入一個字符串,統(tǒng)計其出現(xiàn)頻率最高的字符,并輸出。若存在兩個字符出現(xiàn)頻率相同,則輸出字典序較小的那一個 37.  38. 輸入描述

28、60;39. 一個字符串,保證沒有空格,以回車符結(jié)束,字符串長度<=20 40. 輸出描述 41. 一個字符 42.  43. 輸入樣例 44. aabbaabb 45. 輸出樣例 46. a 47.  48. 解題思路:做一個頻率數(shù)組來統(tǒng)計所有字符的出現(xiàn)頻率,機試時候不會有漢字輸入,因此只考慮輸入是ASCII編碼的情況。  49.  50. */  51. #include<iostream>   52. #incl

29、ude<string.h>   53. using namespace std;  54. int f200; /頻率數(shù)組    55. int biggest=0; /記錄最大的值    56. int main()  57.   58.     memset(f,0,sizeof(f); /將f中的全部元素變成0,寫循環(huán)也

30、可    59.     string s;  60.     cin>>s;  61.     for (int i=0;i<s.size();i+) /枚舉字符串的每一位    62.       63.     &#

31、160;   int num=si; /將si轉(zhuǎn)換成它的ascii碼    64.         fnum+; /頻率次數(shù)加1    65.         biggest=max(biggest,fsi); /比較找出最大的    66.    

32、   67.     for (int i=0;i<=129;i+) /枚舉所有的字符的頻率,找出頻率最高且字典序最小的那一個   68.     if (fi=biggest) /如果滿足要求   69.       70.          

33、;              cout<<(char)(i)<<endl;   71.                        break; /這句break保

34、證了我們只會輸出一個滿足要求的結(jié)果    72.       73.  74. /* 75. 簡單題 76. 題目描述 77. 輸入一個數(shù)字,將其倒序輸出,并輸出其各個位上的乘積 78.  79. 輸入描述 80. 一個正整數(shù),保證在int范圍內(nèi) 81. 輸出描述 82. 兩個數(shù)字,用空格隔開,第一個數(shù)字為其倒序的值,第二個數(shù)字是各個位上的乘積 83.  84. 輸入樣例 85. 134

35、 86. 輸出樣例 87. 431 12 88.  89.  90. 解題思路:刪繁就簡,直接當(dāng)字符串讀入,處理就簡單多了。 91. PS:此處不用糾結(jié)于題意,沒有特別強調(diào)是按照一個數(shù)的格式輸出,因此可以有前導(dǎo)0  92.  93. */  94. #include<iostream>   95. #include<string.h>   96. using namespace std;

36、60; 97. int main()  98.   99.     string s;  100.     int ans=1;  101.     cin>>s;  102.     for (int i=s.size()-1;i>=0;i-) &#

37、160;103.       104.         cout<<si;  /倒序輸出每一位    105.         ans=ans*(si-'0'); /ans累乘每一位的值    106.      

38、; 107.     cout<<' '<<ans<<endl;  108.   109. 中級題 110. 題目描述 111. 輸入10個數(shù)字,按各個位上的和從小到大排序,如果相同,則按數(shù)字從小到大排序。 112.  113. 輸入描述 114. 10個正整數(shù),保證都在int范圍內(nèi),用空格隔開 115. 輸出描述 116. 10個數(shù)字,其從大到小的值,用空格隔開,最后一個數(shù)

39、字后不加空格 117.  118. 輸入樣例 119. 11 3 2 4 5 9 8 7 10 6 120. 輸出樣例 121. 10 2 11 3 4 5 6 7 8 9 122.  123. 解題思路:調(diào)用C+自帶的sort函數(shù),重新改寫compare函數(shù)即可。  124. */  125. #inclu

40、de<iostream>   126. #include<string.h>   127. #include<algorithm> /這個是調(diào)用sort函數(shù)必須的頭文件    128. using namespace std;  129. int arr10;  130. int cal(int x) /計算一個數(shù)字各個位上的和   131.  

41、60;132.     int ans=0;  133.     while (x!=0)  134.       135.           ans+=x%10;  136.         &#

42、160; x/=10;  137.       138.     return ans;1  139.    140. int cmp(int i,int j)  141.   142.     if (cal(i)!=cal(j) /如果兩個數(shù)字各個位上的和不相同,則按照各個位

43、上的和來排序   143.       144.         return cal(i)<cal(j);  145.       146.     else  /否則,即兩個數(shù)各個位上的和相等,則按照數(shù)字本身來排序    147.  

44、60;    148.         return  i<j;  149.       150.   151. int main()  152.   153.     for (int i=0;i<=9;i+) cin>

45、>arri;  154.     sort(arr,arr+10,cmp);  155.     for (int i=0;i<=9;i+)  156.       157.         cout<<arri;  158.   &#

46、160;     if (i!=9) cout<<' ' /如果不是最后一個數(shù)字,則需要在兩個數(shù)字中間輸出一個空格。   159.       160.     cout<<endl;  161.     /PS:最后一個輸出的后面一定要跟回車符而不是空格符   

47、60;162.   163. 中級題164. 題目描述 165. 你有一個容量為100的籮筐,給你30個物品,每個物品的體積已知問:最多能裝多少個物品進(jìn)籮筐 166. 輸入描述 167. 一行30個正整數(shù),用空格隔開,表示每個物品的體積 168. 輸出描述 169. 一個數(shù)字,為最多能裝下的物品數(shù) 170.  171. 輸入樣例(此處用3個物品作為樣例,實際讀入為30個) 172. 5 59 100 173. 輸出樣例 174. 2 175. &

48、#160;176. 解題思路:利用性價比對所有物品進(jìn)行排序,優(yōu)先裝性價比高的,在此題中,性價比就是物品的體積  177. */  178. #include<iostream>   179. #include<string.h>   180. #include<algorithm> /這個是調(diào)用sort函數(shù)必須的頭文件    181. using namespace std;  182. int

49、60;arr31;  183. int main()  184.   185.     for (int i=0;i<=29;i+) cin>>arri;  186.     sort(arr,arr+30); /從小到大排序    187.     /從最小的開始裝框,直到裝滿了為止。  

50、 188.     int sum=0;  189.     for (int i=0;i<=29;i+)  190.       191.          if (sum+arri>100) break; /如果不能裝了就立刻停下來  

51、; 192.          sum=sum+arri; /否則就把這個也裝進(jìn)去   193.       194.     /程序跳出的那個位置的i,就是我們一共裝了的數(shù)量,如果全部都裝了,則i=30   195.      cout<<i<<endl; 

52、60;196.  197. 初級題:(此題是我曾經(jīng)做的機試題) 198. 描述:10個學(xué)生考完期末考試評卷完成后,A老師需要劃出及格線,要求如下: 199. (1) 及格線是10的倍數(shù); 200. (2) 保證至少有60%的學(xué)生及格; 201. (3) 如果所有的學(xué)生都高于60分,則及格線為60分 202. (4) 及格線越高越好,但最高不能超過60  203. 輸入:輸入10個整數(shù),取值0100 204. 輸出:輸出及格線,10的倍數(shù) 205. 輸入樣例

53、:61 51 49 30 20 10 70 80 90 99 206. 輸出樣例:50 207.  208. 解題思路:從高到低枚舉及格線,輸出第一個滿足要求的及格線就是答案  209. */  210. #include<iostream>   211. using namespace std;  212. int arr10;  2

54、13. int main()  214.    215.     for (int i=0;i<=9;i+) cin>>arri;  216.     int line;  217.     for (line=60;line>=0;line-=10) /從高到低枚舉分?jǐn)?shù)線  

55、0; 218.       219.         int num=0; /該變量用來統(tǒng)計這個分?jǐn)?shù)線下,是否超過60%同學(xué)及格   220.         for (int i=0;i<=9;i+)   221.     

56、0;       if (arri>=line) /如果分?jǐn)?shù)大于等于及格線,說明在這個分?jǐn)?shù)線下是及格的    222.                num+;   223.         if (nu

57、m>=6) /如果超過60%的人及格,在這里10的60%就是6   224.            break; /滿足了要求就立刻break,說明這是分?jǐn)?shù)線    225.       226.     cout<<line<<endl;  227.  &#

58、160; 228. 中級題:100分 (此題是我曾經(jīng)做的機試題)  229. 描述:一條長廊里依次裝有n(1  n  65535)盞電燈,從頭到尾編號1、2、3、n-1、n。每盞電燈由一個拉線開關(guān)控制。開始,電燈全部關(guān)著。 230. 有n個學(xué)生從長廊穿過。第一個學(xué)生把號碼凡是1的倍數(shù)的電燈的開關(guān)拉一下;接著第二個學(xué)生把號碼凡是2的倍數(shù)的電燈的開關(guān)拉一下;接著第三個學(xué)生把號碼凡是3的倍數(shù)的電燈的開關(guān)拉一下;如此繼續(xù)下去,最后第n個學(xué)生把號碼凡是n的倍數(shù)的電燈的開關(guān)拉一下。n個學(xué)生按此規(guī)定走完后,長廊里電燈有

59、幾盞亮著。注:電燈數(shù)和學(xué)生數(shù)一致。 231.  232. 輸入:電燈的數(shù)量 233. 輸出:亮著的電燈數(shù)量 234. 樣例輸入:3 235. 樣例輸出:1 236.  237. 解題思路1:這道題,如果要模擬的話,當(dāng)然是可以的,但對于代碼基礎(chǔ)較差的同學(xué)寫起來就比較吃力了,在這里寫模擬的做法  238. 解題思路2:在這道題上面多思考思考,可以看出,對于任何一個燈來說,比如12,其因數(shù)有1,2,3,4,6,12。說明,編號為1,2,3,4,6,12的學(xué)生分別要拉它一下,在這里發(fā)現(xiàn),1*12=12,2*6=1

60、2,3*4=12,所以其因數(shù)都是一一對應(yīng)的,也就是,1拉的那一下被12抵消了,2拉的那一下被6抵消了,那么誰不會被抵消呢?答案是平方數(shù),比如9的因數(shù)是1,3,9,那么3*3=9,而3只拉一次,所以不會被抵消。因此,這道題的答案就是,輸入的n以內(nèi)的平方數(shù)個數(shù),等于(int)sqrt(n)。 239. 從這道題可以看出,編程的很多時候,多思考比多動筆要有用的多。  240.  241. */  242. #include<iostream>   243. #include<string.h> &

61、#160; 244. using namespace std;  245. int vis65536,n;  246. int main()  247.   248.     cin>>n;  249.     memset(vis,0,sizeof(vis); /這句話的意思是把vis數(shù)組清0,0表示此刻燈是關(guān)著的,1表示是開著的 

62、  250.     for (int i=1;i<=n;i+) /枚舉每一個學(xué)生的編號    251.         for (int j=i;j<=n;j+=i) /從j=i開始,每次給j+i,使得i,i*2,i*3,.,這些燈全部都被拉一次開關(guān)   252.       

63、;      visj=1-visj; /1->0,0->1,本質(zhì)上都是用1減去它本身。   253.     int ans=0; /統(tǒng)計答案    254.     for (int i=1;i<=n;i+)  255.         

64、if (visi=1) /如果現(xiàn)在是開燈狀態(tài),答案加一    256.             ans+;  257.     cout<<ans<<endl;    上面的所有代碼能夠看懂,并且自己實現(xiàn)一遍,再練上幾個類似的題,過機試肯定沒問題,能夠輕松寫出上面的代碼,那么機試優(yōu)秀肯定沒問題。想拿滿分,

65、請去學(xué)習(xí)搜索(dfs,bfs),樹(先中后序遍歷,及已知遍歷對樹的構(gòu)造等),棧(怎么用數(shù)組模擬棧,棧的特性等),圖論(最短路算法,連通性判斷等),動態(tài)規(guī)劃(這個就太多了,入門請看背包九講)等等等等。雖然寫了這么多,但高級題其實并沒有這么難,高級題主要考搜索比較多一些,偶爾會有樹、棧、圖、動態(tài)規(guī)劃的題目,不過,要想當(dāng)個好碼農(nóng),算法和數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)是必須的機試葵花寶典就寫到這里了,大師兄在大華為等你們哪,來了我們一起在練獨孤九劍,六脈神劍。附好網(wǎng)上另一師兄機試心得,共小弟妹們參考:華為機試成功歸來,與小伙伴們分享下經(jīng)驗前段時間參加華為機試,機試通過的可以優(yōu)先錄取,優(yōu)先選擇崗位和工作地,關(guān)鍵是面的好,

66、還可以談更高的工資,最多在西安可以拿到18W。好處還是蠻多的,抱著試試看的態(tài)度就去了。哈哈,華為機試記錄正是開始。提前在網(wǎng)上交了簡歷,周圍同學(xué)只要報了軟件研發(fā)類的相關(guān)崗位都收到短信通知,需要用到編程的同學(xué)基本上都受到短信了。一天三波,在西工大毅字樓三樓機房,南門進(jìn)去直走左拐就到了,我是第二天早上的機試,前一天已經(jīng)聽機試過的同學(xué)考的內(nèi)容涉及數(shù)組、鏈表、指針、字符串、循環(huán)、枚舉、排序等吧,這個估計要看人品,平時出門多扶老奶奶過馬路吧。其實考過后發(fā)現(xiàn)這個機試跟平時做項目不一樣,項目可能更多的注重實現(xiàn)研究所需要的某個功能不會去注意這么多細(xì)節(jié),但是機試考的更多的是基本功。下面重點跟大家分享下上機題吧,我

67、只列舉了我抽到的三個,其他同學(xué)抽到的跟這個大同小異吧。大家自己編寫下,對即將開始的面試都會有幫助的??荚噧?nèi)容:數(shù)組、鏈表、指針、字符串、循環(huán)、枚舉、排序等(從考過的同學(xué)那兒總結(jié)的可能不全)試題結(jié)構(gòu):考試總共三道題,說是難中易,初級題(60分)、中級題(100分)、高級題(160分),最難的接近一百行,說多不多,但自己敲出來還是費了點勁,考試時間:兩個小時。平時練得少可能稍微捉雞點。最簡單的一個描述:10個學(xué)生考完期末考試評卷完成后,A老師需要劃出及格線,要求如下:(1) 及格線是10的倍數(shù);(2) 保證至少有60%的學(xué)生及格;(3) 如果所有的學(xué)生都高于60分,則

68、及格線為60分輸入:輸入10個整數(shù),取值0100輸出:輸出及格線,10的倍數(shù)輸入樣例:61 51 49 30 20 10 70 80 90 99輸出樣例:50自己編寫代碼簡單如下:1. #include <stdio.h>   2.   3.   4. void bubbleSort(int arr)    5.         6.     int

69、60;i = 0;   7.     int j = 0;   8.     int t = 0;   9.   10.     for(i = 0;i < 10; i+)   11.      

70、;           12.         for(j = 0; j < (9 - i); j+)   13.                 

71、60;       14.             if(arrj + 1 < arrj)   15.                      

72、;         16.                 t = arrj + 1;   17.                 arrj

73、 + 1 = arrj;    18.                 arrj = t;   19.                20.     

74、       21.        22.   23.   24. int getPassLine(int a)   25.   26.     int i = 0;   27.        28.   &#

75、160; bubbleSort(a);   29.        30.     if (a0 >= 60)   31.        32.         return 60;   33.     

76、  34.     else  35.        36.         return (a4 / 10) * 10);   37.        38.   39.   40.   4

77、1.   42.   43. int main()   44.   45.     int a10 = 0;   46.   47.     scanf("%d %d %d %d %d %d %d %d %d %d", &a0,&#

78、160; &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, &a9);   48.        49.     printf("%d", getPassLine(a);   50.      &#

79、160; 51.   return 0;   52.   描述:一條長廊里依次裝有n(1  n  65535)盞電燈,從頭到尾編號1、2、3、n-1、n。每盞電燈由一個拉線開關(guān)控制。開始,電燈全部關(guān)著。有n個學(xué)生從長廊穿過。第一個學(xué)生把號碼凡是1的倍數(shù)的電燈的開關(guān)拉一下;接著第二個學(xué)生把號碼凡是2的倍數(shù)的電燈的開關(guān)拉一下;接著第三個學(xué)生把號碼凡是3的倍數(shù)的電燈的開關(guān)拉一下;如此繼續(xù)下去,最后第n個學(xué)生把號碼凡是n的倍數(shù)的電燈的開關(guān)拉一下。n個學(xué)生按此規(guī)定走完后,長廊里電燈有幾

80、盞亮著。注:電燈數(shù)和學(xué)生數(shù)一致。輸入:電燈的數(shù)量輸出:亮著的電燈數(shù)量樣例輸入:3樣例輸出:1答案參考:1. #include <stdio.h>   2.   3. #define  MAX_BULB_NUM 65535   4. /*  5. 功能: n個學(xué)生按規(guī)定走完后,長廊里電燈有幾盞亮著。  6. 原型:  7.     int GetLightLampNum(int n);

81、 8.  9. 輸入?yún)?shù):  10.     int n: 電燈/學(xué)生的數(shù)量。  11.  12. 返回值:  13.     int: 亮著的電燈數(shù)量。  14.  15. */  16.   17. int GetLightLampNum(int n)   18.   19.   &#

82、160; char Bulb_FlagMAX_BULB_NUM = 0;    /0代表燈滅,1代表燈亮   20.     unsigned int i;   21.     unsigned int j = 1;   22.     unsigned int

83、0;Count = 0;   23.        24.     if (n < 1)|(n > 65535)   25.        26.         return false;   27. &#

84、160;      28.   29.     while ( j <= n)   30.        31.         for (int i = 1; i <= n; i+)  

85、 32.            33.             if (0 = (i%j)   34.                35.    &

86、#160;            Bulb_Flagi-1 += 1;   36.                 Bulb_Flagi-1 = Bulb_Flagi-1%2    /if操作用來反轉(zhuǎn)滿足條件的燈泡狀態(tài)

87、  37.                38.            39.         j+;   40.        41.   42.  

88、;   for (i = 0; i < MAX_BULB_NUM; i+)   43.        44.         if (1 = Bulb_Flagi)   45.          

89、0; 46.             Count+;   47.            48.        49.   50.     return Count;   51.   

90、;52.   53. int main(void)   54.   55.     int input;   56.     scanf("%d",&input);   57.     printf("%d",GetLightLampNum(input);   58.   

91、;高級題樣題:地鐵換乘 描述:已知2條地鐵線路,其中A為環(huán)線,B為東西向線路,線路都是雙向的。經(jīng)過的站點名分別如下,兩條線交叉的換乘點用T1、T2表示。編寫程序,任意輸入兩個站點名稱,輸出乘坐地鐵最少需要經(jīng)過的車站數(shù)量(含輸入的起點和終點,換乘站點只計算一次)。地鐵線A(環(huán)線)經(jīng)過車站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 

92、A17 A18地鐵線B(直線)經(jīng)過車站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15輸入:輸入兩個不同的站名輸出:輸出最少經(jīng)過的站數(shù),含輸入的起點和終點,換乘站點只計算一次輸入樣例:A1 A3輸出樣例:3答案參考:1. import java.util.*;   2.   3.   4. p

93、ublic class Main    5.        6.     private static int INVALID_POSITION = 255;   7.        8.     class BusLine    9. &

94、#160;       String busstop;   10.         String lineName;   11.            12.         public BusLi

95、ne(String line)    13.             String stops = line.split(" ");   14.             this.busstop = new S

96、tringstops.length;   15.             for (int i = 0; i < stops.length; i+)    16.                

97、 this.busstopi = stopsi;   17.                 lineName = stops0.substring(0, 1);   18.              

98、0;                19.            20.            21.         /* get the 

99、;stop position from the line */  22.         int getStopPosition (String point)    23.             for (int i = 0;&

100、#160;i < busstop.length; i+)    24.                 if (busstopi.equals(point)    25.              

101、60;      return i;   26.                    27.                28.     

102、0;       return INVALID_POSITION;           29.            30.            31.      &#

103、160;  int getDistance(String pointA, String pointB)    32.             int positionA = 0;   33.             in

104、t positionB = 0;   34.             int len = 0;   35.                36.         

105、;    positionA = getStopPosition(pointA);   37.             positionB = getStopPosition(pointB);   38.              

106、0; 39.             if (positionA != INVALID_POSITION && positionB != INVALID_POSITION)    40.               

107、;  len = Math.abs(positionA - positionB) + 1;   41.                 if (lineName.equals("A") && len > (busstop.length - len + 2)    42.                     len =  (bussto

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論