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+1if canWin(teamA, teamB) {
        ))+2if 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#w로 이메일을 보내 주시기 바랍니다.3codebox.com(메일을 보내는 경우 #을 @으로 변경하십시오. 신고를 하고 관련 증거를 제공하시면, 해당 내용이 사실로 확인되면 즉시 해당 내용을 삭제할 것입니다。)

추천해드립니다