为什么Golang中的这个正确代码在HackerRank中被认为是错误的?

时间:2016-07-29 21:50:36

标签: algorithm go

我使用以下代码解决了Golang中的“比较三胞胎”,但它说答案是错误的。 当我在本地环境中运行代码时,它会显示所需的结果。

here is the link to the problem at HackerRank

以下是代码。

package main

import "fmt"

func main() {
    a, b := ReadArrays()
    sa, sb := CompareIt(a, b)
    fmt.Printf("A: %d, B: %d\n", sa, sb)
}

func CompareIt(a, b []int) (int, int) {
    var scoreA int
    var scoreB int

    for i := 0; i < 3; i++ {
        if a[i] > b[i] {
            scoreA += 1
        } else if b[i] > a[i] {
            scoreB += 1
        }
    }
    return scoreA, scoreB
}

func ReadArrays() ([]int, []int) {
    a := make([]int, 3)
    fmt.Println("Please enter the first 3 digits separated by space or comma")
    for i := range a {
        fmt.Scanf("%d", &a[i])
    }
    b := make([]int, 3)
    fmt.Println("Please enter the second 3 digits separated by space or comma")
    for i := range b {
        fmt.Scanf("%d", &b[i])
    }
    return a, b
}

当我在本地环境中运行此代码时,它要求我在终端输入前3位数字,然后要求我插入其他3位数字,然后代码比较它并将分数给予A和B根据挑战的要求。

1 个答案:

答案 0 :(得分:7)

您的输出与预期输出不匹配:

你的输出(标准输出)

Please enter the first 3 digits separated by space or comma
Please enter the second 3 digits separated by space or comma
A: 1, B: 1

预期产出

1 1

你的印刷方式超出了他们的要求。您也正在为计算机制作此程序而不是一个人。您不需要文本提示。

删除多余的打印:

package main

import "fmt"

func main() {
    a, b := ReadArrays()
    sa, sb := CompareIt(a, b)
    fmt.Printf("%d %d", sa, sb)
}

func CompareIt(a, b []int) (int, int) {
    var scoreA int
    var scoreB int

    for i := 0; i < 3; i++ {
        if a[i] > b[i] {
            scoreA += 1
        } else if b[i] > a[i] {
            scoreB += 1
        }
    }
    return scoreA, scoreB
}

func ReadArrays() ([]int, []int) {
    a := make([]int, 3)
    for i := range a {
        fmt.Scanf("%d", &a[i])
    }
    b := make([]int, 3)
    for i := range b {
        fmt.Scanf("%d", &b[i])
    }
    return a, b
}