for-loop - Golang 赋值

标签 for-loop go

我们想计算一些整数的平方和,负数除外 输入的第一行将是一个整数 N (1 <= N <= 100) 以下N个测试用例中的每一个都包含一行包含一个整数X(0 < X <= 100),然后是下一行以空格分隔的X个整数(Yn,-100 <= Yn <= 100) 对于每个测试用例,计算除负数以外的整数的平方和,并将计算出的和打印到输出。测试用例之间没有空行 (从标准输入中获取输入,并输出到标准输出) 不要使用 for 语句 仅使用标准库 用Go编程语言写

示例输入

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++;
            }
        }
    }

最佳答案

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

关于for-loop - Golang 赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55902279/

相关文章:

sql - shell脚本中的psql循环

eclipse - eclipse 上的 Golang : "Resource doesn' t have a corresponding Go package"on Mac

go - Context界面设计

for-loop - 当您使用范围 channel 中断for语句时会发生什么

Github项目结构

amazon-web-services - 如何模拟 *ec2.DescribeVolumes 输出的值

ios - 如何在iOS swift4的for循环中更改标签文本?

C++ 同名局部变量在循环之间保持值

mysql - 如何在 for 循环和 insert 语句中使用粘贴函数和引号

php - While循环使用变量2次