The problem is to find in an array of integers a sequence of consecutive numbers whose sum is equal to n.
Our program will read a list of integers (e.g., 5 2 3 4 6 1 4 10 1), followed by one integer n (e.g., 7). Example output:
5 2 3 4 6 1 4 10 1
7
5 + 2 = 7
3 + 4 = 7
6 + 1 = 7
If there is no sequence, we output “There is no solution”.
Code:
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func getNum(r *bufio.Reader) []int {
input, _ := r.ReadString('\n')
input = strings.TrimSpace(input)
nStr := strings.Split(input, " ")
var nInt []int
for _, v := range nStr {
n, _ := strconv.Atoi(v)
nInt = append(nInt, n)
}
return nInt
}
func main() {
r := bufio.NewReader(os.Stdin)
nums := getNum(r)
numStr, _ := r.ReadString('\n')
numStr = strings.TrimSpace(numStr)
n, _ := strconv.Atoi(numStr)
// check summ of 2 nums to find out n
var sum int
var nlist []int
success := false
for i := 0; i < len(nums); i++ {
nlist = nil
sum = 0
for j := i; j < len(nums); j++ {
nlist = append(nlist, nums[j])
sum += nums[j]
if sum == n {
for v := 0; v < len(nlist); v++ {
if v+1 < len(nlist) {
fmt.Printf("%d + ", nlist[v]) // to put +
} else {
fmt.Printf("%d", nlist[v]) // last element
}
}
fmt.Printf(" = %d\n", n)
success = true
break
}
}
}
if !success {
fmt.Println("There is no solution")
}
}