Golang作业

时间:2019-04-29 11:21:01

标签: for-loop go

我们要计算一些整数的平方和,负数除外 输入的第一行将是整数N(1 <= N <= 100) 以下N个测试用例中的每一个都由一行包含整数X(0

样本输入

2

4

3 -1 1 14

5

9 6 -53 32 16

样本输出

206

1397

所以我是Golang的新手,我设法使用for语句解决了这个问题。 我如何遵守既定的而不用于?仅使用标准库? 任何指针将不胜感激

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 个答案:

答案 0 :(得分:1)

Go没有其他语言可能熟悉的whileuntilforeach循环构造。在Go中,forrange语句将它们全部替换:

// 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的单循环构造,则可以使用递归或the goto statement

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)
}