2017完美世界研發(fā)部筆試題_取經(jīng)

一诊杆、題目概述

師徒四人西天取經(jīng),途中必需跨過一座橋何陆,四個(gè)人從橋的同一端出發(fā)晨汹,你得幫助他們到達(dá)另一端,天色很暗而他們只有一支手電筒贷盲,一次同時(shí)最多可以有兩個(gè)人一起經(jīng)過橋淘这。而過橋的時(shí)候必須持有手電筒,所以就得有人把手電筒帶來帶去巩剖,來回橋兩端铝穷。手電筒不能用丟的方式來傳遞,四個(gè)人的步行速度各不同球及,若兩人同行則以較慢者的速度為準(zhǔn)氧骤,大師兄需花1分鐘過橋,二師兄需花2分鐘過橋吃引,三師兄需花5分鐘過橋筹陵,師傅需花10分鐘過橋。請問他們最短在多少分鐘內(nèi)過橋镊尺?()
A. 18
B. 17
C. 19
D. 16


二朦佩、思路

一開始直接想到,用最小的那個(gè)數(shù)來回跑庐氮,也就是大師兄來回跑语稠,算出來是19,可是又想了下弄砍,如下:
1仙畦、大師兄和二師兄過橋,算二師兄的時(shí)間也就是2分鐘
2音婶、大師兄獨(dú)自拿手電回來 1分鐘
3慨畸、三師弟和師傅那手電過橋,算師傅的時(shí)間也就是10分鐘
4衣式、二師弟拿手電回來 2分鐘
5寸士、最后大師兄和二師弟過橋 2分鐘
總共17分鐘

這里寫圖片描述

雖然結(jié)果出來了檐什,感覺有點(diǎn)不實(shí)在,這其中的規(guī)律是怎樣的呢弱卡?有沒有什么規(guī)律解決這類似的問題呢乃正,比如只有三個(gè)人過橋呢?二師兄不過橋婶博,結(jié)果又是什么呢瓮具?再比如,多一個(gè)人過橋呢凡人?多了個(gè)白龍馬過橋搭综,白龍馬過橋的時(shí)間時(shí)6分鐘,結(jié)果又是什么呢划栓?有沒有什么規(guī)律呢兑巾,或者說有沒有個(gè)公式來計(jì)算呢?用編程怎么解忠荞?

求教大神蒋歌?先睡了,嘗試下編程解決委煤!


三堂油、編程解決

2016年10月7日01:39:55
本來當(dāng)時(shí)寫博客的第二天就用編程解決了這個(gè)問題的,可是因?yàn)榉N種原因碧绞,還沒有時(shí)間把代碼貼上來!

import java.util.ArrayList;

public class Pilgrimage {

    final static int times[] = { 1, 2, 5, 10 };// 花費(fèi)時(shí)間
    final static String names[] = { "大師兄", "二師兄", "三師兄", "師傅" };// 人物

    public static void main(String[] args) {
        Integer other_bridges[] = { 0, 0, 0, 0 };// 橋另一邊
        Integer bridges[] = { 1, 1, 1, 1 };// 當(dāng)前橋這邊 府框,1表示存在,0表示不在

        // 開始遞歸
        loop(bridges, other_bridges, 0, new StringBuffer());
    }

    private static void loop(Integer[] bridges, Integer[] other_bridges,
            int time, StringBuffer msg) {
        ArrayList<Integer> positions = new ArrayList<Integer>();// 記錄還在起始端人的下標(biāo)
        for (int i = 0; i < bridges.length; i++) {
            if (bridges[i] == 1) {
                positions.add(i);// 記錄下標(biāo)
            }
        }
        int len = positions.size();

        for (int i = 0; i < len - 1; i++) {
            for (int j = i + 1; j < len; j++) { // 循環(huán)取結(jié)合
                // 記錄狀態(tài)
                Integer[] zt_bridges = bridges.clone();
                Integer[] zt_other_bridges = other_bridges.clone();
                int zt_time = time;
                StringBuffer zt_msg = new StringBuffer(msg);

                // 過橋---------
                time += times[positions.get(j)];// 花費(fèi)時(shí)間直接取最大的
                move(bridges, other_bridges, 1, positions.get(i));
                move(bridges, other_bridges, 1, positions.get(j));
                msg.append(" 過橋:" + names[positions.get(i)] + "&"
                        + names[positions.get(j)]);
                // System.out.print(" 過橋:" + names[positions.get(i)] + "_"
                // + names[positions.get(j)]);

                // 回來接人------
                if (isend(other_bridges)) {
                    msg.append(" 總共花費(fèi):" + time);
                    System.out.println(msg.toString());
                    // System.out.println(" 總共花費(fèi):" + time);
                    return;
                }
                int k = 0;
                for (int ii = 0; ii < other_bridges.length; ii++) {// 選擇最快的回來
                    if (other_bridges[ii] == 1) {
                        k = ii;
                        break;
                    }
                }
                time += times[k];
                move(bridges, other_bridges, 0, k);
                msg.append("  回來:" + names[k]+"  ***  ");
                // System.out.print(" 回來:" + names[k]);

                // 繼續(xù)循環(huán)遍歷
                loop(bridges.clone(), other_bridges.clone(), time,
                        new StringBuffer(msg));

                // 還原狀態(tài)
                bridges = zt_bridges;
                other_bridges = zt_other_bridges;
                time = zt_time;
                msg = zt_msg;
            }
        }
    }

    /**
     * 移動(dòng)的那個(gè)人
     * 
     * @param bridges
     * @param other_bridges
     * @param direction
     *            方向
     * @param position
     */
    private static void move(Integer[] bridges, Integer[] other_bridges,
            int direction, int position) {
        if (direction == 1) {// 往另一端走
            bridges[position] = 0;
            other_bridges[position] = 1;
        } else {// 回來接人走
            bridges[position] = 1;
            other_bridges[position] = 0;
        }
    }

    // 判斷是否已經(jīng)結(jié)束了
    // 當(dāng)other_bridges {1,1,1,1}表示結(jié)束
    private static boolean isend(Integer[] other_bridges) {
        for (int i : other_bridges) {
            if (i == 0)
                return false;
        }
        return true;
    }

}

運(yùn)行的結(jié)果:


這里寫圖片描述
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讥邻,一起剝皮案震驚了整個(gè)濱河市迫靖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兴使,老刑警劉巖系宜,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異发魄,居然都是意外死亡盹牧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門励幼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汰寓,“玉大人,你說我怎么就攤上這事苹粟∮谢” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵六水,是天一觀的道長俺孙。 經(jīng)常有香客問我,道長掷贾,這世上最難降的妖魔是什么睛榄? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮想帅,結(jié)果婚禮上场靴,老公的妹妹穿的比我還像新娘。我一直安慰自己港准,他們只是感情好旨剥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浅缸,像睡著了一般轨帜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衩椒,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天蚌父,我揣著相機(jī)與錄音,去河邊找鬼毛萌。 笑死苟弛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阁将。 我是一名探鬼主播膏秫,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼做盅!你這毒婦竟也來了缤削?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吹榴,失蹤者是張志新(化名)和其女友劉穎僻他,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腊尚,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吨拗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婿斥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劝篷。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖民宿,靈堂內(nèi)的尸體忽然破棺而出娇妓,到底是詐尸還是另有隱情,我是刑警寧澤活鹰,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布哈恰,位于F島的核電站只估,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏着绷。R本人自食惡果不足惜蛔钙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荠医。 院中可真熱鬧吁脱,春花似錦、人聲如沸彬向。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娃胆。三九已至遍希,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間里烦,已是汗流浹背孵班。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留招驴,地道東北人篙程。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像别厘,于是被迫代替她去往敵國和親虱饿。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 楔子 擎蒼触趴,你以為過了七萬年就可以快活了么氮发? 我是青丘的白淺,也是當(dāng)年的司音冗懦。今日便是拼了這條命爽冕,我也要將你再鎖上...
    女少月半閱讀 9,884評論 6 62
  • 楔子 擎蒼,你以為過了七萬年就可以快活了么披蕉? 我是青丘的白淺颈畸,也是當(dāng)年的司音。今日便是拼了這條命没讲,我也要將你再鎖上...
    女少月半閱讀 7,307評論 10 27
  • 唐七公子的《三生三世枕上書》中有這么一段:白淺曾經(jīng)教導(dǎo)鳳九眯娱,做神仙最重要的是不怕丟臉,因不怕丟臉是一種勇氣爬凑,賜予一...
    燕臻閱讀 668評論 0 1
  • 最近看到喬任梁離世消息以及微博上的一些評論徙缴,感觸頗深。有人說嘁信,多么樂觀和開朗的男孩于样,實(shí)在不相信這是真的疏叨。突然間很...
    雅姒矜閱讀 230評論 0 1
  • 感恩 今天終于突破了困境 今天靈性煉金依然陪伴我 今天很充實(shí) 今天高我依然很愛自己 今天我頓悟了很多 今天開心地和...
    fc8c4755608d閱讀 324評論 0 0