Go语言实现一个

基本思路

1 2 3 4 5 6 7
前 n 个的和是:
1 : 1
2 : 3
3 : 6
4 : 10
...
例如: 对于给出的样例 18 2
长度应为 3
// sum(n) 表示从 1 开始前n个数的和
于是 18 - sum(3)(6) = 12 % 3 (0) 12 / 3 = 4
所以结果 为 1 2 3 全部加 4
5 6 7
基于这个思路可以得到下面的代码:

package main

import "fmt"

func main() {
    var N, L int
    var find = true
    _, _ = fmt.Scanf("%d %d", &N, &L)
    for find {
        if move := (N - getSum(L)) / L; (N-getSum(L))%L == 0 {
            for i := 1 + move; i < move+L; i++ {
                fmt.Printf("%d ", i)
            }
            fmt.Print(move + L)
            find = false
        } else {
            L++
        }
        if L > 100 {
            fmt.Print("No")
            find = false
        }
    }
}

func getSum(n int) int {
    return (1 + n) * n /2
}