You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go实现整数平方和计算时如何等全部输入完成后再统一输出结果

整数平方和计算器统一输出实现方案

问题背景

基于Go语言开发的整数平方和计算器,核心功能为计算输入整数的平方和,计算过程自动排除所有负整数,代码要求全程使用递归实现、不允许使用循环。
当前程序存在异常:每处理完一个测试用例就立刻输出计算结果,还未完成全部输入就提前产生输出,不符合预期效果。

预期输入输出

样例输入:

2
4
3 -1 1 14
5
9 6 -53 32 16

样例输出:

206
1397

原问题代码

// Calculate the sum of squares of given integers, excluding any negatives In Go lang
// Code written by Pintu Sharma

// Enter Total number of test cases := N
// N Times :
// Enter Total number of values.    := num
// Enter [num] times int values
// sample input:
// 2
// 4
// 3 -1 1 14
// 5
// 9 6 -53 32 16

// sample output :
// 206
// 1397


// sum of square, only positive numbers without using any loop
// That's why I use recursion in Go

// my Code in Go lang

package main

import "fmt"

// Taking Number of Test Cases and values

func test_cases(n int) {
    if n <= 0 {
        return
    }
    var num int
    // total number of values
    fmt.Scanf("%d", &num)
    fmt.Println(sum_of_square(num))
    test_cases(n-1)
}

// Calculating sum of square for each test case

func sum_of_square(value_count int) int {
    if value_count == 0 {
        return 0
    }
    var value int
    // take input value for generating sum of square
    fmt.Scanf("%d", &value)
    // if only value is positive
    if value > 0 {
        return value*value + sum_of_square(value_count - 1)
    }
    return sum_of_square(value_count - 1)
}

// Main function

func main() {
    var N int
    // number of total Test Cases
    fmt.Scanf("%d", &N)
    // Take input for each Test Case
    test_cases(N)
}

问题原因

核心原因是原test_cases递归逻辑中,每计算完一个测试用例的平方和就立刻调用fmt.Println打印结果,没有对结果做暂存,因此处理完第一个用例就会触发输出,无需等待全部输入接收完成。

修改方案

全程保留递归实现、不引入任何循环,仅做两处调整:

  • 改造测试用例处理逻辑,递归收集所有测试用例的计算结果到切片中,计算过程不触发任何打印操作
  • 所有输入处理完成、结果全部收集完毕后,通过递归方式统一打印所有结果

修改后完整代码

package main

import "fmt"

// 递归计算单组测试用例的正整数平方和,原逻辑无需改动
func sum_of_square(value_count int) int {
    if value_count == 0 {
        return 0
    }
    var value int
    fmt.Scanf("%d", &value)
    if value > 0 {
        return value*value + sum_of_square(value_count - 1)
    }
    return sum_of_square(value_count - 1)
}

// 递归收集所有测试用例的计算结果,过程中不打印
func collectResults(n int) []int {
    if n <= 0 {
        return []int{}
    }
    var num int
    fmt.Scanf("%d", &num)
    currentSum := sum_of_square(num)
    // 递归处理剩余测试用例
    restSums := collectResults(n-1)
    return append([]int{currentSum}, restSums...)
}

// 递归打印所有结果,不使用循环
func printResults(results []int, idx int) {
    if idx >= len(results) {
        return
    }
    fmt.Println(results[idx])
    printResults(results, idx+1)
}

func main() {
    var N int
    fmt.Scanf("%d", &N)
    // 先收集完所有结果
    allResults := collectResults(N)
    // 全部输入处理完成后统一输出
    printResults(allResults, 0)
}

效果验证

修改后程序会先逐行读取所有输入、递归完成所有测试用例的平方和计算,待所有输入读取完毕后才会统一输出结果,完全匹配样例的输入输出要求,且全程未使用任何循环,符合原代码的递归实现约束。


内容的提问来源于stack exchange,提问作者JDWAS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 01:15:39