我试图构建一个代码,当用户输入一个数字序列时,它将通过序列比较每个数字,并且对于序列中的每个新的最大数字,它将对所有以前的数字求和func main() { var numeri []int numeri = GetInputSlice() fmt.Println(numeri) var sum int num := len(numeri) for i := 0; i < num - 1 ; i++ { sum += numeri[i] if numeri[i] > numeri[i+1] || numeri[i] == num - 1 { fmt.Println(sum) sum = 0 } }}完整代码在这里:https ://go.dev/play/p/13ljQPmKaRA如果我输入这个数字序列 [1 2 13 0 7 8 9 -1 0 2] 我想得到 16、24 和 1。但是在我的代码中我只得到 16 和 24 而没有得到最后一个 1 我可以'想不出解决这个问题的方法。
1 回答
米脂
TA贡献1836条经验 获得超3个赞
只有numeri[i]被添加到sum,并且您的循环永远不会访问最后一项 ( i < num - 1),那么最后一项怎么可能被添加呢?
遍历整个切片,执行加法,但如果您不在最后一个元素,则只与下一个元素进行比较。如果我们在最后一个,我们也想打印,所以我们可以使用一个条件
i == max || numeri[i] > numeri[i+1]
如果i == max(短路评估),将不会执行与下一个元素的比较。
例如:
max := len(numeri) - 1
for i, v := range numeri {
sum += v
if i == max || v > numeri[i+1] {
fmt.Println(sum)
sum = 0
}
}
这将输出(在Go Playground上尝试):
[1 2 13 0 7 8 9 -1 0 2]
16
24
1
- 1 回答
- 0 关注
- 80 浏览
添加回答
举报
0/150
提交
取消