Язык Go. Сумма последовательных чисел


Задача состоит в том, чтобы найти в массиве целых чисел последовательность последовательных чисел, сумма которых равна n.

Наша программа будет считывать список целых чисел (например, 5 2 3 4 6 1 4 10 1), за которым следует одно целое число n (например, 7). Пример вывода:

5 2 3 4 6 1 4 10 1
7
5 + 2 = 7
3 + 4 = 7
6 + 1 = 7

Если последовательности нет, выведем «There is no solution».

Код (это учебный пример, не на скорость исполнения, а чтобы показать самый простой алгоритм):

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

 


Запись опубликована в рубрике Go. Добавьте в закладки постоянную ссылку.

8 комментариев на «Язык Go. Сумма последовательных чисел»

  1. Witcher говорит:

    Обрати внимание на вот этот проект: ebitengine dot org

    Simple 2D game engine for Go. Ebitengine’s simple API allows you to quickly and easily develop 2D games that can be deployed across multiple platforms. Ebitengine games work on desktop (Windows, macOS, Linux, and FreeBSD), web browsers (through WebAssembly), and even on mobile (Android and iOS)! Ebitengine has been used to develop production-level games.

    • Компьютерщик говорит:

      спасибо, не знал про этот движок, надо будет глянуть. у меня в игре графики не будет особо, но все равно любопытно

  2. Witcher говорит:

    Лично мне больше по душе си/си++ из-за большого количества библиотек, большей гибкости, скорости, совместимости, охвата платформ. Кроме этого ещё пишу свои велосипеды, которые поинтереснее того, что предлагает стандартная библиотека 🙂

    Некоторые плюсовики на раст сейчас переходят, но там пока всё очень сыро, да и граблей хватает, особо нет смысла.

    • Компьютерщик говорит:

      у Го тоже самое: большое количество библиотек, гибкость, скорость, совместимость, охват платформ. Он заточен на бэкенд. На Си я продолжаю пились свой рогалик, но свою коммерческую разработку буду вести на Го) т.к. я делаю текстовую игру на менюшках в js, Го там идеален.. в Си оч неудобно работать со строками.

      • Witcher говорит:

        А как монетизировать собираешься? Ты в гугл плей с адмобом будешь её выкладывать или на стим? Или просто на сайте с рекламой? На счёт строк в Си — да, ты прав, в Си не хватает синтаксического сахара и других удобств. Это одна из причин по которой я перешёл на смесь Си и Си++. А в Го, хоть язык и симпатичный, но я скорее всего туда не полезу, так как не хочу распылять свои наработки. Хватит того что вынужден, прости господи, котлин и джаву штудировать вместе с андроид студией 🙂 Ещё планирую погрузиться в изучение WebGL и bgfx.

        • Компьютерщик говорит:

          подпиской буду монетизировать и декоративными штуками 🙂 я на го решил сосредоточиться, пока нравится

  3. Witcher говорит:

    Я смотрел как Штукенция баловалась с ChatGPT, и мне показалось что она слегка не догоняет что это такое 🙂 Ну, я не удивлён, потому что мало кто догоняет. Это не очередной «поисковик», это нечто, сложнейшая разумная интеллектуальная структура, эволюционировавшая путём триллионов триллионов итераций на суперкомпьютерах (это считай типа как миллиарды лет по меркам планеты). И самое главное, то, как это «нечто» работает — не знает никто, потому что это выглядит как набор весовых коэффициентов, которые путём сложных комбинаций создают возможность глубоко понимать смыслы, абстрагироваться, упорядочивать информацию, производить анализ, как это происходит — «криптографическая» загадка на тысячелетия, и вряд ли крохотный человеческий разум вообще будет когда-либо в состоянии разгадать, как эта эволюционировавшая искусственная нейросетевая модель функционирует. Человек только может задавать параметры этой эволюции, экспериментировать с разными подходами по алгоритмам обратного распространения ошибок, но внутреннее устройство эволюционировавшей нейросетевой модели — суперсложно понять. То что мы сейчас наблюдаем, это беспрецедентно в истории человечества.

Добавить комментарий для Компьютерщик Отменить ответ

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.