对于一个无穷大的数字,例如Pi,如何找到给定数字n首次出现的精确数字总和。
例如。如果n = 20
Pi = 3.14159265358979323846264338327950288419716939 ...
然后第一次出现是从数字1到数字5,因为:1 + 4 + 1 + 5 + 9 = 20
如果n = 30,则第一次出现是从数字5到数字11因为9 + 2 + 6 + 5 + 3 + 5 = 30
answer应该有一个有效的php演示
答案是使用滑动窗口来保持总和。因此,保持两个指针为i
和j
。继续增加j
并在其中添加元素。当它超过期望的总和时,增加i
并减少i处的元素。然后继续增加j
,直到达到总和或总和溢出,然后重复上述过程。
示例总和= 30
[1
41592653589793238 >> i = j = 0 current_sum = 1
[1415926
53589793238 >> i = 0 j = 6 current_sum = 28
在下一次迭代中加5将导致current_sum> 30,因此您增加i
1415926
53589793238 >> i = 1 j = 6 current_sum = 27
1415926
53589793238 >> i = 2 j = 6 current_sum = 23
14159265
3589793238 >> i = 2 j = 7 current_sum = 28
以这种方式继续前进,它将最终到达等于sum = 30的窗口。这应该使您摆脱困境,并帮助您找到答案。