English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golangの田忌赛馬問題の実現方法分析

この記事では、Golangアルゴリズムの田忌の馬戦問題の実装方法について説明します。皆さんに参考にしていただくために、以下の通りです:

【田忌の馬戦問題】

入力:

入力には複数のテストデータがあります。各テストデータには3行:
第一行にはN(1≤N≤1000)は馬の数を示します。
第二行にはN個の整数が含まれており、それは荘子的N頭の馬の速度です(数字が大きいほど速いです)。
第三行にはN個の整数が含まれており、それは敵対者のN頭の馬の速度です。
Nが0の場合は終了します。

出力:

もし賢明なあなたが慎重に計画を立てることができ、試合を勝ち取ることができる場合(勝利回数が試合の合計回数の半分を超える場合)、"YES"を出力します。それ以外の場合は"NO"を出力します。

例入力

5
2 3 3 4 5
1 2 3 4 5
4
2 2 1 2
2 2 3 1
0

例出力

YES
NO

コード実装(Golang):

package huawei
//Date:2015-8-14 15:43:11
import (
    "fmt"
    "io"/ioutil"
    "sort"
    "strings"
)
//思路:自分で最も強い(半数+1)馬と敵対者の最も弱い(半数+1)马比赛
func Test11Base() {
    data, err := ioutil.ReadFile("DataFiles/huawei_test11.txt")
    checkError(err, "Reading file")
    strs := strings.Split(string(data), "\n")
    index := 0
    for {
        count := strs[index
        if count == "0" {
            break
        }
        teamA := convertToIntSlice(strings.Fields(strs[index+1))
        teamB := convertToIntSlice(strings.Fields(strs[index+2))
        if canWin(teamA, teamB) {
            fmt.Println("YES")
        } else {
            fmt.Println("NO")
        }
        index += 3
    }
}
//teamA が勝利できるかどうかを判定する
func canWin(teamA []int, teamB []int) bool {
    sort.Ints(teamA)
    sort.Ints(teamB)
    length := len(teamA)
    tryCount := length/2 + 1
    for i := 0; i < tryCount; i++ {
        //A 組最強の半分
        speedA := teamA[length-(tryCount-i)]
        //B 組最弱の半分
        speedB := teamB[i]
        if speedA <= speedB {
            return false
        }
    }
    return true
}

本稿で述べたことが皆様の Go 言語プログラム設計に役立つことを願っています。

声明:本文の内容はインターネットから取得され、著作権者に帰属します。インターネットユーザーにより自発的に貢献し、自己でアップロードされた内容であり、本サイトは所有権を有しておらず、人工的に編集されていません。著作権侵害を疑う内容が見つかった場合は、メールを送信していただければ幸いです:notice#oldtoolbag.com(メールを送信する際、#を@に変更してください。申し訳ありませんが、関連する証拠を提供していただき、確認がとれた場合は、本サイトが即座に侵害を疑う内容を削除します。)

おすすめ