華為2016機試題

2021-08-29 22:38:36 字數 2686 閱讀 3483

輸入一串用空格隔開的數字串,對於數字串的奇數字按公升序排序,偶數字按降序排序. 

示例輸入: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

namespace

std;

intmain(

void)

intlength = num.size();

for(int

i = 0; i

} }

for(

inti = 1; i

} }

for(

inti = 0; i < length; i++)

cout << num[i]<<

" ";

cout<

system(

"pause");

return0;

} 二、洞穴逃生 

描述

:精靈王子愛好冒險,在一次探險歷程中,他進入了乙個神秘的山洞。在洞穴深處,精靈王子不小心觸動了洞穴內暗藏的機關,整個洞穴將很快塌陷,精靈王子必須盡快逃離洞穴。精靈王子的跑步速度為17m/s,以這樣的速度可能是無法逃出洞穴的。慶幸的是精靈王子擁有閃爍法術,可在1s內移動60m,不過每次使用閃爍法術都會消耗魔法值10點。精靈王子的魔法值恢復的速度為4點/s,只有處在原地休息狀態時才能恢復。現在已知精靈王子的魔法初值m,他所在洞穴中的位置與洞穴出口之間的距離s,距離洞穴塌陷的時間t。你的任務是寫乙個程式幫助精靈王子計算如何在最短的時間內逃離洞穴。若能逃出,輸出」yes」,並輸出逃出所用的最短時間;若不能逃出,則輸出」no」,同時輸出精靈王子在剩下的時間內能走的最遠距離。注意字母大小寫。 

注意

:精靈王子跑步、閃爍或休息活動均以秒(s)為單位。且每次活動的持續時間為整數秒。距離的單位為公尺(m)。 注:m、s、t均是大於等於0的整數。由輸入保證取值合法性,考生不用檢查。 

提醒

: 如果輸入的s為0,則說明本身已經在出口,輸出應為:yes 0 

如果輸入的t為0(且s不為0),則說明已經沒有時間了,輸出應為:no 0 

輸入

: m s t 

輸出:

「yes 逃出洞穴所用的最短時間」 或 「no 在洞穴塌陷前能逃跑的最遠距離」 

樣例輸入

: 10 50 5 

樣例輸出

:yes 1

題目分析

:首先看題目中給出的兩種王子逃跑的方式——跑步和魔法。跑步的速度是17m/s,使用閃爍法術的移動速度是60m/s,可見魔法足夠時使用魔法是最優的方式。當魔法不夠時,就要權衡是花時間恢復魔法還是跑步,權衡依賴的兩個因素是距離洞口的距離和剩餘時間,剩餘時間要足夠恢復和使用魔法,且距離洞口要足夠遠(比如如果距離洞口僅僅1m直接跑出去就好了,不用浪費時間恢復魔法),因此,有如下幾種情況: 

1)魔法值足夠且時間不為0的情況下,不論距離多遠,直接魔法閃爍; 

2)若剩餘魔法值大於等於6,則只需要1s就可恢復到10點魔法,此時若時間大於2秒(因為釋放魔法需要1s),且距離洞口距離大於34m(若小於34m直接花2s跑出去就好了),恢復魔法然後閃爍; 

3)若剩餘魔法值大於等於2,則只需要2s就可恢復到10點魔法,此時若時間大於3秒,且距離洞口距離大於51m,恢復魔法然後閃爍; 

4)第四種情況比較複雜,若魔法剩餘小於2,則恢復魔法要3s,施放魔法要1s,這種情況還比不上跑步來得快,但是如果後面的距離還足夠長,且時間足夠的話,那麼接下來那一次只需要2s來恢復魔法,這樣(3+1)+(2+1)=7s內可以移動120m,比跑步快,因此當距離大於120m,時間大於7s時,選擇恢復魔法後閃爍; 

5)如果不滿足以上四種條件,表明時間不夠恢復魔法或者是距離較近,則選擇跑步前進。

#include

using

namespace

std;

intmain()

else

if(t <= 0)

//沒有時間了

while

(s>0 && t>0)

else

if(m >= 2 && t - ceil(

float

((10 - m)) / 4) >= 1 && s - 17 * ceil(

float

((10 - m)) / 4) >= 0)

//如果

m>=2

,並且距離夠遠、時間足夠——恢復魔法

else

if(s >= 120 && t >= 7)

//如果

m<2

,並且距離大於等於

120m

、時間大於等於

7s——恢復魔法

else

//魔法不夠、時間也不夠,或者距離洞口很近的情況下

} if(s <= 0)

else

cout << endl;

system(

"pause");

return0;

}

華為2016機試題目

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

2016華為機試題 大數相減

問題描述 輸入一串以空格作為分割符的字串,字串由0 9組成,空格前面的部分字串為大數a,空格後的部分字串為大數b,用a b,輸出做差結果 算例 輸入 12345678 99999999 輸出 87654321 下面是實現的程式,程式寫的不好,有很多可以精簡的地方,但結果都正確。大數相減.cpp 定義...

華為2016春招機試題

原題如下 求二叉樹的深度 描述 給出乙個字串形式表達的二叉樹,求出指定節點深度。輸入的樹形結構字串格式為 1 以父節點 左子樹 右子樹表示的二叉樹 每個父節點不會超過兩個子節點 2 樹的每乙個節點採用單個字母表示 樹的層次採用數字表示,樹根的層次為1,下一層為2,不會超過9層 3 字串以 節點名稱 ...