当前位置: 代码迷 >> 综合 >> golang刷题之和为S的连续正数序列
  详细解决方案

golang刷题之和为S的连续正数序列

热度:14   发布时间:2024-01-25 04:01:14.0

题目:

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

思路:等差公式 s= n*(a1+an)/2,设置原始数据low=0,high=1,计算 cur := (high -low +1)*(low + high)/2,当cur=S时,遍历low到high加入数组

代码:

func findcontinueSequence(sum int)  {//保存和为s的数组result := [][]int{}low := 0high := 1for low < high {//等差公式 s= n*(a1+an)/2cur := (high -low +1)*(low + high)/2//当low与high之间的数之和=S,将low和high加入数组if cur == sum {//保存数据的数组temp := []int{}for i := low;i <= high;i++  {temp = append(temp, i)}result = append(result,temp)low++}//当low与high之间的数之和<S,high++if cur < sum {high++}////当low与high之间的数之和>S,low++if cur > sum {low++}}for i := 0;i < len(result);i++  {for j := 0;j < len(result[i]) ;j++  {fmt.Print(result[i][j])fmt.Print(" ")}fmt.Println();}
}