[Golang] 利用等差公式求解

序列和

https://www.nowcoder.com/practice/46eb436eb6564a62b9f972160e1699c9

首先由等差公式有,,代入,长度,等比间隔,求得首项,加上 x 又为非负整数,故可以每次对于 L 求得 x,看 x 是否为非负整数,如果为非负整数则输出结果,否则L++,进行下一轮的判断。最后不要忘了如果长度L>100的话,属于找不到,就输出No。

package main

import (
    "fmt"
    "math"
)

func main() {
    var N, L int
    _, _ = fmt.Scanf("%d %d", &N, &L)
    // x = (N/L) - (L-1)/2
    for L <= 100 {
        // go需要进行严格的类型转换
        x := float64(N)/float64(L) - float64(L-1)/2
        // 直接判断x是否为整数
        if math.Ceil(x) == x && x>0 {
            display(int(x), L)
            return // 找到了就退出,L是从小到大遍历的,所以输出的一定是最短长度的结果
        } else {
            L++
        }
    }
    fmt.Print("No")
}

// 输出结果
func display(x, L int) {
    for i := 0; i < L-1; i++ {
        fmt.Printf("%d ", x+i)
    }
    fmt.Printf("%d", x+L-1)
}
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务