English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
この記事では、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(メールを送信する際、#を@に変更してください。申し訳ありませんが、関連する証拠を提供していただき、確認がとれた場合は、本サイトが即座に侵害を疑う内容を削除します。)