国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

華為OD機(jī)試真題【羊狼農(nóng)夫過河】

這篇具有很好參考價(jià)值的文章主要介紹了華為OD機(jī)試真題【羊狼農(nóng)夫過河】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1、題目描述

【羊、狼、農(nóng)夫過河】
羊、狼、農(nóng)夫都在岸邊,當(dāng)羊的數(shù)量小于狼的數(shù)量時(shí),狼會(huì)攻擊羊,農(nóng)夫則會(huì)損失羊。農(nóng)夫有一艘容量固定的船,能夠承載固定數(shù)量的動(dòng)物。要求求出不損失羊情況下將全部羊和狼運(yùn)到對(duì)岸需要的最小次數(shù)。只計(jì)算農(nóng)夫去對(duì)岸的次數(shù),回程時(shí)農(nóng)夫不會(huì)運(yùn)送羊和狼。
備注:農(nóng)夫在或農(nóng)夫離開后羊的數(shù)量大于狼的數(shù)量時(shí)狼不會(huì)攻擊羊。農(nóng)夫自身不占用船的容量。

【輸入描述】
第一行輸入為M,N,X, 分別代表羊的數(shù)量,狼的數(shù)量,小船的容量。

【輸出描述】
輸出不損失羊情況下將全部羊和狼運(yùn)到對(duì)岸需要的最小次數(shù)(若無法滿足條件則輸出0)。

【示例1】
輸入: 5 3 3
輸出: 3
說明:第一次運(yùn)2只狼第二次運(yùn)3只羊第三次運(yùn)2只羊和1只狼

【示例2】
輸入: 5 4 1
輸出: 0
說明:如果找不到不損失羊的運(yùn)送方案,輸出0

2、解題思路

初始化一個(gè)變量minTimes為(羊數(shù)量+狼數(shù)量) *小船容量;
定義一個(gè)回溯DFS方法, 用于模擬過河的過程,每次遞歸計(jì)算 當(dāng)前狀態(tài)下的最小運(yùn)輸次數(shù);
在DFS函數(shù)中,遍歷嘗試所有可能的運(yùn)輸組合,保證組合中羊的數(shù)量大于等于狼的數(shù)量,以防止羊被狼吃掉;
在遞歸過程中,如果發(fā)現(xiàn)某種組合能夠使得所有羊和狼都運(yùn)到對(duì)岸,且所需次數(shù)小于當(dāng)前記錄的最小次數(shù),則更新最小次數(shù);
后輸出最小運(yùn)輸次數(shù)。如果沒有找到滿足條件的運(yùn)輸方案,輸出0。

3、參考代碼

import java.util.Scanner;

public class 羊狼農(nóng)夫過河 {
    public static int minTimes = Integer.MAX_VALUE;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int m = in.nextInt();  // 羊數(shù)量
            int n = in.nextInt();  // 狼數(shù)量
            int x = in.nextInt();  // 小船數(shù)量
            minTimes = 0;
            dfs(m, n, x, 0, 0, 0);

            if (minTimes == Integer.MAX_VALUE) {
                System.out.println(0);
            } else {
                System.out.println(minTimes);
            }
        }
    }

    public static int dfs(int m, int n, int x, int m1, int n1, int times) {
       // 如果小船容量足夠運(yùn)輸所有羊和狼,則只需要一次即可
        if (x >= m + n) {
            if (times + 1 < minTimes) {
                minTimes = times + 1;
            }
            return times + 1;
        }

        // 遍歷所有的運(yùn)輸組合,保證組合中羊的數(shù)量大于狼的數(shù)量
        for (int i = 0; i <= m && i <= x; i++) {
            for (int j = 0; j <= n && i + j <= x; j++) {
                if (i + j == 0) {
                    continue;
                }

                // 船離岸后,原來這岸,要么沒有羊,要么羊比狼多
                if ((m - i == 0 || m - i > n - j) && (m1 + i == 0 || m1 + i > n + j)) {
                    int result = dfs(m, n, x, m - i, n - j, times + 1);
                    if (result < minTimes && result != 0) {
                        minTimes = result;
                    }
                }
            }
        }
        return 0;
    }
}

4、相似題目

(1)代碼隨想錄回溯專題文章來源地址http://www.zghlxwxcb.cn/news/detail-682689.html

到了這里,關(guān)于華為OD機(jī)試真題【羊狼農(nóng)夫過河】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 2023華為OD機(jī)試真題【區(qū)間交疊/貪心算法】【Python Java】

    2023華為OD機(jī)試真題【區(qū)間交疊/貪心算法】【Python Java】

    給定坐標(biāo)軸上的一組線段,線段的起點(diǎn)和終點(diǎn)均為整數(shù)并且長度不小于1,請(qǐng)你從中找到最少數(shù)量的線段,這些線段可以覆蓋住所有線段。 輸入描述 第一行輸入為所有線段的數(shù)量,不超過10000,后面每行表示一條線段,格式為”x,y”, x和y 分別表示起點(diǎn)和終點(diǎn),取值范圍是

    2024年02月13日
    瀏覽(22)
  • 【華為OD機(jī)試真題 JAVA】算法中的常用知識(shí)點(diǎn)

    ????????IndexOf():返回指定字符在字符串中第一次出現(xiàn)處的索引,如果此字符串中沒有這 ????????????????????????????樣的字符,則返回 -1。 ????????charAt(i):返回指定索引 i 處的字符。索引范圍為從 0 到 length() - 1。 ????????equals(s):將字符串與指定

    2024年02月10日
    瀏覽(19)
  • 2023華為OD機(jī)試真題【區(qū)間交疊/貪心算法】【Python Java C++】

    2023華為OD機(jī)試真題【區(qū)間交疊/貪心算法】【Python Java C++】

    給定坐標(biāo)軸上的一組線段,線段的起點(diǎn)和終點(diǎn)均為整數(shù)并且長度不小于1,請(qǐng)你從中找到最少數(shù)量的線段,這些線段可以覆蓋住所有線段。 輸入描述 第一行輸入為所有線段的數(shù)量,不超過10000,后面每行表示一條線段,格式為”x,y”, x和y 分別表示起點(diǎn)和終點(diǎn),取值范圍是

    2024年02月13日
    瀏覽(20)
  • 【華為OD機(jī)試真題 C++】1118 - 最大利潤 | 機(jī)試題+算法思路+考點(diǎn)+代碼解析

    ??個(gè)人博客首頁: KJ.JK ? ??專欄介紹: 華為OD機(jī)試真題匯總,定期更新華為OD各個(gè)時(shí)間階段的機(jī)試真題,每日定時(shí)更新,本專欄將使用Python語言進(jìn)行更新解答,包含真題,思路分析,代碼參考,歡迎大家訂閱學(xué)習(xí) ??題目描述 商人經(jīng)營一家店鋪, 有number種商品,由于倉庫限

    2024年02月04日
    瀏覽(31)
  • 【華為OD機(jī)試真題 Java語言】68、矩陣擴(kuò)散 | 機(jī)試題+算法思路+考點(diǎn)+代碼解析

    ??個(gè)人博客首頁: KJ.JK ? ??專欄介紹: 華為OD機(jī)試真題匯總,定期更新華為OD各個(gè)時(shí)間階段的機(jī)試真題,每日定時(shí)更新,本專欄將使用Java語言進(jìn)行更新解答,包含真題,思路分析,代碼參考,歡迎大家訂閱學(xué)習(xí) ??題目描述 存在一個(gè)m*n的二維數(shù)組,其成員取值范圍為0或1 ?

    2024年02月14日
    瀏覽(51)
  • 【華為OD機(jī)試真題 C++】1109 - 優(yōu)雅子數(shù)組 | 機(jī)試題+算法思路+考點(diǎn)+代碼解析

    ??個(gè)人博客首頁: KJ.JK ? ??專欄介紹: 華為OD機(jī)試真題匯總,定期更新華為OD各個(gè)時(shí)間階段的機(jī)試真題,每日定時(shí)更新,本專欄將使用Python語言進(jìn)行更新解答,包含真題,思路分析,代碼參考,歡迎大家訂閱學(xué)習(xí) ??題目描述

    2024年02月06日
    瀏覽(86)
  • 【華為OD機(jī)試真題 Python語言】68、矩陣擴(kuò)散 | 機(jī)試題+算法思路+考點(diǎn)+代碼解析

    ??個(gè)人博客首頁: 鯊魚狼臧 ? ??專欄介紹: 2023華為OD機(jī)試真題,使用Python進(jìn)行解答,專欄每篇文章都包括真題,思路參考,代碼分析,訂閱有問題后續(xù)可與博主解答問題 ??題目描述 存在一個(gè)m*n的二維數(shù)組,其成員取值范圍為0或1 ? 其中值為1的成員具備擴(kuò)散性,每經(jīng)過

    2024年02月15日
    瀏覽(26)
  • 【華為OD機(jī)試真題 C++語言】68、矩陣擴(kuò)散 | 機(jī)試題+算法思路+考點(diǎn)+代碼解析

    ??個(gè)人博客首頁: KJ.JK ? ??專欄介紹: 華為OD機(jī)試真題匯總,定期更新華為OD各個(gè)時(shí)間階段的機(jī)試真題,每日定時(shí)更新,本專欄將使用C++語言進(jìn)行更新解答,包含真題,思路分析,代碼參考,歡迎大家訂閱學(xué)習(xí) ??題目描述 存在一個(gè)m*n的二維數(shù)組,其成員取值范圍為0或1

    2024年02月16日
    瀏覽(20)
  • 260.【華為OD機(jī)試真題】信道分配(貪心算法-Java&Python&C++&JS實(shí)現(xiàn))

    ??點(diǎn)擊這里可直接跳轉(zhuǎn)到本專欄,可查閱頂置最新的華為OD機(jī)試寶典~ 本專欄所有題目均包含優(yōu)質(zhì)解題思路,高質(zhì)量解題代碼(JavaPythonC++JS分別實(shí)現(xiàn)),詳細(xì)代碼講解,助你深入學(xué)習(xí),深度掌握!

    2024年02月20日
    瀏覽(27)
  • 【華為OD機(jī)試真題 C++】1060 - 翻牌求最大分 | 機(jī)試題+算法思路+考點(diǎn)+代碼解析

    ??個(gè)人博客首頁: KJ.JK ? ??專欄介紹: 華為OD機(jī)試真題匯總,定期更新華為OD各個(gè)時(shí)間階段的機(jī)試真題,每日定時(shí)更新,本專欄將使用C語言進(jìn)行更新解答,包含真題,思路分析,代碼參考,歡迎大家訂閱學(xué)習(xí) ??題目描述 給出n個(gè)牌數(shù),在-10到100之間,求最大得分。 ?

    2023年04月22日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包