昨天參加了華為的機試,兩個小時,三大題。
第一題很簡單,長度為n的陣列,將後m個數字移到前面,前面的n-m個數字移到後面,然後輸出陣列裡面前m個、後m個數的和。
第二題是輸入員工的姓名,若干次的打卡時間,輸出打卡的狀態(包括缺席、打卡不正常、早退、遲到、正常),以及工作時間。不難,只是情況比較多,所以做起來比較花費時間。
第一題、第二題花了太多不該花的時間(還是**寫太少),導致第三題當時沒來得及好好做。過後思考了下,其實並不算難,只是要考慮幾種情況。
第三題題目如下。(圖偷來的,侵刪)
思路如下:
首先計算出消滅boss需要多少輪,以及被boss消滅需要多少輪,如果掛之前能夠消滅boss,則輸出消滅boss的回合數,否則輸出-1。
消滅boss回合數的計算步驟:
1.如果魔法量大於等於10,則發動魔法攻擊,直到boss被滅或者魔法量不夠。若boss被消滅,則不需執行下面步驟,已經得到回合數。
2.若剩餘魔法量為6、7、8、9,則需要一輪魔法恢復則可進行魔法攻擊,即兩輪造成60點的傷害;普通攻擊兩輪只能造成34點傷害;因此當boss剩餘hp大於34時,發動魔法攻擊;
3.若剩餘魔法量為2、3、4、5,則需要兩輪輪魔法恢復則可進行魔法攻擊,即三輪造成60點的傷害;普通攻擊則三輪只能造成51點傷害;因此若此時boss剩餘hp大於51時,發動魔法攻擊。
4.五輪魔法恢復可以得到20點魔法量,可發動2輪魔法攻擊,總共七回合,造成120點傷害;而普通攻擊七回合造成119點傷害;因此,當boss的hp大於等於120時,使用5+2回合造成120點傷害。
3.boss的hp不足120點時,則發動普通攻擊知道消滅boss即可。
**如下:
#includeusing namespace std;
int main()
//若剩餘魔法量為6、7、8、9,當boss剩餘hp大於34時,發動魔法攻擊;
if(hp2 > 34 && mp >= 6)
//若剩餘魔法量為2、3、4、5,boss剩餘hp大於51時,發動魔法攻擊。
while(hp2 > 51 && mp >= 2)
//魔法值不夠時,如果此時boss剩餘血大於等於120,則5輪恢復魔法,2輪發起魔法進攻
while(hp2 >=120)
//剩餘情況則普通攻擊
while(hp2>0)
//計算多少輪被殺死
int bekilled = 0;
while(hp1 > 0)
if(hp1 >0)
} //是否能消滅boss
if(killboss<=bekilled)
cout << killboss << endl;
else
cout << -1 << endl;
} return 0;
}
華為筆試題 (消滅終極boss)
玩家殺boss,玩家有普通攻擊和魔法攻擊 boss 有普通攻擊和暴擊 求玩家戰勝boss的最小回合數 include include void fight int a 3 int fight time,int win else a 0 10 a 2 120 if atmp 100000 atmp 0...
華為機試題
今天去華為機試,感覺是再謹慎都不為過啊!zc前一天晚上還跟我強調了判空,記憶體釋放。前兩題都是基本題,後面一題不會。1 輸入兩個數 反轉相加的和輸出。2 三天打漁兩天曬網 從1990 年1月1日開始 打漁輸出fishing 曬網輸出sleeping 我因為printf的是fishing sleepi...
華為機試題
通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串壓縮程式,將字串中連續出席的重複字母進行壓縮,並輸出壓縮後的字串。壓縮規則 1.僅壓縮連續重複出現的字元。比如字串 abcbc 由於無連續重複字元,壓縮後的字串還是 abcbc 2.壓縮欄位的格式為 字元重複的次數 字元 例如 字串 yyy...