華為校招筆試:洞穴逃生

題目

原文

精靈王子愛好冒險,在一次探險歷程中,他進入了一個神秘的山洞。在洞穴深處,精靈王子不小心觸動了洞穴內(nèi)暗藏的機關(guān),整個洞穴很快塌陷,精靈王子必須晶塊逃離洞穴。精靈王子的跑步速度為17m/s,以這樣的速度可能是無法逃出洞穴的。慶幸的是精靈王子擁有閃爍法術(shù),可在1s內(nèi)移動60m,不過每次使用閃爍法術(shù)都會消耗魔法值10點。精靈王子的魔法值恢復(fù)的速度為4點/s,只有處在原地休息狀態(tài)時才能恢復(fù)。
現(xiàn)在已知精靈王子的魔法初始值M,他所在洞穴中的位置與洞口出口之間的距離S,距離洞穴坍塌的時間T。你的任務(wù)是寫一個程序幫助精靈王子計算如何在最短的時間內(nèi)逃離洞穴。若能逃出,輸出"Yes",并輸出逃出所有的最短時間;若不能逃出,則輸出"No",同時輸出精靈王子在剩下的時間內(nèi)能走的最遠距離。注意字母大小寫。注意:精靈王子跑步、閃爍或休息活動均以秒(s)為單位。且每次活動的持續(xù)時間為整數(shù)秒。距離的單位(m)。

分析

一眼望過去都是密密麻麻的文字,看著很嚇人。沒關(guān)系,我們把對我們有用的信息提煉出來就好了:

  • 跑步速度:17m/s,閃爍速度:60m/s
  • 閃爍需要消耗10點魔法值,魔法值的恢復(fù)速度為4點/s,恢復(fù)時需要在原地休息
  • 秒(s)為原子單位,也就是說不存在零點幾秒

通過分析我們可以得出:

  • 如果魔法充足,優(yōu)先使用閃爍
  • 如果魔法不足,則分情況考慮(如下表):
    • 如果距離 >= 60m且 <= 68m,跑步更劃算
    • 如果距離 <= 34m,跑步更劃算
    • 其他情況則閃爍更劃算
      距離=34,60m時,跑步和閃爍是等效的(都能逃出洞口),為了簡化問題,統(tǒng)一使用跑步。
魔法值 閃爍 跑步
0、1 (3+1)s - 60m 4s - 68m
2、3、4、5 (2+1)s - 60m 3s - 51m
6、7、8、9 (1+1)s - 60m 2s - 34m
1s - 17m
 使用閃爍需要的時間 = 恢復(fù)時間 + 使用時間

參考答案

代碼

 import java.util.Scanner;


public class Main {

    public static void main(String[] args) {
        int m, s, t;
        Scanner cin = new Scanner(System.in);
        m = cin.nextInt();
        s = cin.nextInt();
        t = cin.nextInt();
        Main test = new Main();
        test.start(m, s, t);
    }

    public void start(int m, int s, int t) {
        //記錄初始距離
        int l = s;
        int second = 0;
        while (s > 0) {
            //如果魔法大于10 就使用魔法
            while (m >= 10) {
                second++;
                if (second > t) {
                    System.out.println("No " + (l - s));
                    return;
                }
                m -= 10;
                s -= 60;
                if (s <= 0) {
                    System.out.println("Yes " + second);
                    return;
                }
            }
            //跑
            if (s >= 60 && s <= 68) {
                second += 4;
                if (second > t) {
                    System.out.println("No " + (l - s));
                    return;
                }
                s -= 17 * 4;
            } else if (s <= 34) {
                second++;
                if (second > t) {
                    System.out.println("No " + (l - s));
                    return;
                }
                s -= 17;
            } else {
                //休息
                int tem = 0;
                while (m < 10) {
                    second++;
                    //嘗試跑
                    tem += 17;
                    if (second >= t) {
                        System.out.println("No " + ((l - s) + tem));
                        return;
                    }
                    if (tem > s){
                        System.out.println("Yes " + second);
                        return;
                    }
                    m += 4;
                }
            }
        }
        System.out.println("Yes " + second);
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 夏末,在五臺山的深山中,有一片少有人踏入的森林。林中的樹木遮天蔽日,原本原本炙熱的陽關(guān)都被樹葉擋住,異常的涼爽。林...
    冰月光輝閱讀 17,290評論 0 14
  • 本文將天賦點換算成游戲金幣來做一個純粹的價值分析,而這樣分析的缺點也非常明顯,裝備可以有替代品,但天賦點卻不占格子...
    月輪閱讀 7,138評論 1 10
  • 歷來異界小說層出不窮,其中異界也千差萬別,有很多侮辱智商的東西是在胡言亂語,甚至自相矛盾,現(xiàn)在,就跟大家分享一下真...
    空白_7閱讀 26,489評論 14 43
  • 高野 一個人的一生無論走得再遠,都走不出養(yǎng)育他的故鄉(xiāng)和村莊。當(dāng)一個作家或者詩人曾把鮮血和熱淚揮灑在那片養(yǎng)育他的熱土...
    鷹鷹兒閱讀 728評論 0 2
  • 對于上學(xué)的孩子來說,學(xué)習(xí)是其第一任務(wù),可除了學(xué)習(xí),是否還應(yīng)該關(guān)注一下孩子其它方面呢。 雖然作為父母關(guān)注孩子的學(xué)習(xí),...
    一生所求8閱讀 325評論 0 0

友情鏈接更多精彩內(nèi)容