Голанг назначение - PullRequest
       15

Голанг назначение

1 голос
/ 29 апреля 2019

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

Пример ввода

2

4

3 -1 1 14

5

9 6 -53 32 16

Пример вывода

206

1397

Итак, я новичок в Голанге, и мне удалось решить эту проблему с помощью операторов.Как я могу соблюдать данное и не использовать для?используя только стандартные библиотеки?Будем очень благодарны за любые указатели

package main

import "fmt"

func main() {
    var N int
    fmt.Scan(&N)
    for a := 0; a < N; a++ {
        var X int
        var res int = 0
        fmt.Scan(&X)
        for b := 0; b < X; b++ {
            var Y int
            fmt.Scan(&Y)
            if Y > 0 {
                res = res + Y*Y
            }
        }
        fmt.Println(res)
    }
}

// Я использовал fmt для чтения данных с консоли.Сумма квадратов выясняется только при положительном числе.Затем вычисленная сумма отображается на экране

Я получил тот же ожидаемый результат, но не используя требуемый метод

Вот как я это сделал в Java

import java.util.Scanner;

    public class SumSquares {

        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int n = in.nextInt(), m, num;
            int i = 0;
            while (i < n) {
                int j = 0, sum = 0;
                m = in.nextInt();
                while (j < m) {
                    num = in.nextInt();
                    if (num > 0) {
                        sum += num*num;
                    }
                    j++;
                }
                System.out.println(sum);
                i++;
            }
        }
    }

1 Ответ

1 голос
/ 29 апреля 2019

Go не имеет конструкций циклов while, until или foreach, с которыми вы, возможно, знакомы по другим языкам.В Go операторы for и range заменяют их все:

// Three expressions, i.e. the usual
for i := 0; i < n; i++ {
}

// Single expression; same as while(condition) in other languages
for condition { 
}

// No expressions; endless loop, i.e. same as while(true) or for(;;)
for {
}

// for with range; foreach and similar in other languages. Works with slices, maps, and channels.
for i, x := range []T{} {
}

Если вам не разрешено использовать однопетлевую конструкцию Go, у вас останется либо рекурсия, либо goto оператор :

package main

import (
    "fmt"
)

func main() {
    var N int
    fmt.Scan(&N)

    fmt.Println(f(N, 0))
}

func f(n, sum int) int {
    if n == 0 {
        return sum
    }

    var Y int
    fmt.Scan(&Y)
    if Y > 0 {
        sum += Y * Y
    }

    return f(n-1, sum)
}

с goto:

package main

import (
    "fmt"
)

func main() {
    var N, Y, sum int
    fmt.Scan(&N)

again:
    fmt.Scan(&Y)
    if Y > 0 {
        sum += Y * Y
    }

    N--
    if N > 0 {
        goto again
    }

    fmt.Println(sum)
    fmt.Println(43)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...