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