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

Análisis del método de implementación del problema del caballo de Sun Tzu en Golang

Este artículo explica la implementación del algoritmo de Tian Ji's Horse Race en Golang. Comparto con todos para referencia, como se muestra a continuación:

【Problema del caballo de Tian Ji】

Entrada:

Se tienen múltiples conjuntos de datos de prueba. Cada conjunto de datos de prueba incluye3línea:
La primera línea de entrada es N(1≤N≤1000), que representa la cantidad de caballos.
La segunda línea tiene N números enteros, que son las velocidades de los caballos de Yu Zi (los números más grandes representan velocidades más rápidas).
La tercera línea tiene N números enteros, que son las velocidades de los caballos del oponente.
Cuando N es 0, salga.

Salida:

Si a través de tu inteligente planificación cuidadosa, si puedes ganar la carrera (el número de victorias es mayor que la mitad del número total de carreras), entonces salida "SÍ". De lo contrario, salida "NO".

Entrada de ejemplo

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

Salida de ejemplo


NO

Implementación del código (Golang):

paquete huawei
//Fecha:2015-8-14 15:43:11
import (
    "fmt"
    "io"/ioutil"
    "sort"
    "strings"
)
//Enfoque: usar el más fuerte (la mitad+1) el caballo más débil del oponente (la mitad+1) una carrera de caballos
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
    }
}
//Determinar si teamA puede ganar
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++ {
        //La mitad más fuerte del equipo A
        speedA := teamA[length-(tryCount-i)]
        //La mitad más débil del equipo B
        speedB := teamB[i]
        if speedA <= speedB {
            return false
        }
    }
    return true
}

Espero que este artículo sea útil para todos en la programación de lenguajes Go.

Declaración: el contenido de este artículo se obtiene de la red, y pertenece a los autores originales. El contenido es contribuido y subido por usuarios de Internet, este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume ninguna responsabilidad legal. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplaza # con @) para denunciar, y proporciona pruebas relevantes. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Te gustará