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
    }
}
//تحديد ما إذا كان الفريق A يمكنه الفوز
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 (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) للإبلاغ، وتقديم الدليل المتعلق، وإذا تم التحقق من ذلك، سيتم حذف المحتوى المزعوم فورًا.

توصيات لك