Выполнение функции необходимое количество раз - PullRequest
0 голосов
/ 10 февраля 2020

рассчитать сумму квадратов заданных целых чисел, исключая любые отрицательные значения. Первой строкой ввода будет целое число N (1 <= N <= 100), указывающее количество контрольных примеров, которые необходимо выполнить. Каждый из тестовых случаев будет состоять из строки с целым числом X (0 <X <= 100), за которой следует другая строка, состоящая из X числа целых чисел, разделенных пробелом Yn (-100 <= Yn <= 100). Для каждого тестового случая вычислите сумму квадратов целых чисел, исключая любые отрицательные значения, и напечатайте рассчитанную сумму в выходных данных. </p>

Примечание. Не должно быть выходных данных, пока не будут получены все входные данные. Примечание 2: не ставьте пустых строк между решениями тестовых случаев. Примечание 3: Возьмите ввод из стандартного ввода и вывод в стандартный вывод.

Правила Напишите свое решение, используя Go Язык программирования Ваш исходный код должен быть одним файлом (основной пакет). Не используйте его для выписки. Вы разрешается использовать только стандартные библиотечные пакеты

«Проблема, с которой я сталкиваюсь» Функция «квадрат» ниже не выполняется требуемое количество раз в соответствии с входными тестовыми примерами. Чтобы соответствовать определенным c требованиям, мне не разрешалось использовать оператор for. Пожалуйста, помогите мне. Язык Go.

package main

import "fmt"

var s []int

func square(l int) {
    i := 0
    sum := 0
Square:

    if l > 0 {
        s[i] = s[i] * s[i]
        sum = sum + s[i]
        i++
        l--
        goto Square

    }
    fmt.Println(sum)

}

func myfunc(a int) {
Here:
    if a > 0 {
        var b int
        fmt.Scanln(&b)
        if b > 0 {
            s = append(s, b)
        }
        a--
        goto Here
    }

}

func main() {
    var a int
    fmt.Scanln(&a)
TestCases:
    if a > 0 {
        var T int
        fmt.Scanln(&T)
        myfunc(T)
        a--
        goto TestCases
    }
    square(len(s))
}

1 Ответ

1 голос
/ 10 февраля 2020

Вот реализация с использованием рекурсии:

package main

import "fmt"

func testCase(N int) {
    if N <= 0 {
        return
    }
    var X int
    fmt.Scanf("%d", &X)
    fmt.Println(sumOfSquare(X))
    testCase(N-1)
}

func sumOfSquare(X int) int {
    if X == 0 {
        return 0
    }
    var Y int
    fmt.Scanf("%d", &Y)
    if Y > 0 {
        return Y*Y + sumOfSquare(X-1)
    }
    return sumOfSquare(X-1)
}

func main() {
    var N int
    fmt.Scanf("%d", &N)
    testCase(N)
}

Вот пример вывода:

$ go run main.go
2 4 3 -1 1 14 5 9 6 -53 32 16
206
1397
...