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