每天一道算法题

题目如下:

输入一个正数target,打印出所有和为target的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,

所以结果打印出3个连续序列1~5、4~6和7~8。

分析一下:

计算出这个target的值:

1.因为是要相等, 既target / 2, 在这个中间值右边的再相加肯定就会大于target本身了, 所以我们只能用左边的值相加才有可能等于target

编写代码:

php版本


	function target()
	{
		$target = 15;
		$middle = $target / 2;
		$data = [];

		for ($i = 1; $i <= $middle; $i++) {
			$sum = 0;
			$j = $i;
			while ($sum < $target) {
				$sum += $j;
				$j++;
			}
			if ($sum == $target) {
				$temp = [];
				for ($k = 0; $k < $j - $i; $k++) { 
					$temp[] = $k + $i;
				}
				$data[] = $temp;
			}
		}
		return $data;
	}


golang版本


	target := 15
	middle := target / 2
	var arrayList [][]int
	for i := 1; i <= middle; i++ {
		sum := 0
		j := i
		for sum < target {
			sum += j
			j++
		}
		if sum  == target {
			var temp []int
			for k := 0; k < j - i; k++ {
				temp = append(temp, k+i)
			}
			arrayList = append(arrayList, temp)
		}
	}
	fmt.Println(arrayList)

标签:
作者:华传财
舞台上有你,就演好角色; 舞台上没你,就静静地做观众;

已有 0 位网友参与,快来吐槽:

发表评论