2017-12-23 9 views
-2

N = 150이라고 말하면서 단계가 100입니다.범위에 걸쳐 증가하는 숫자를 분배하고 N의 합이되도록하려면 어떻게해야합니까?

배열에 100 개 (또는 임의의 숫자를 선택할 수 있습니다.) 항목을 만들려고합니다. 설정 할 수있는 속도로 증가하고 N은 모두 합계됩니다. 이상적으로는 최소값과 최대 값을 설정합니다.

Examples: min=1, max=4 

distributed_array = [1, 1.1, 1.2, 1.3 ... 3.9, 4] 

np.sum(distributed_array) = 150 
+0

짝수 단계를 사용하여 최소, 최대, 합계 및 단계 수를 동시에 지정할 수 없습니다. 그것을위한 자유가 충분하지 않습니다. – user2357112

+0

최소값, 최대 값 및 단계 수가 합계를 결정합니다. – user2357112

+0

간격은 .1 일 필요가 없으며 1에서 4 사이의 간격을두고 N (이 예제에서는 150)의 합계가 필요합니다. 간격은 어느 정도 일정해야합니다. – Nish

답변

2

종종 필요가 없습니다 있도록 문제를-이 제약을 통해 귀하의 문 유효한 대답. 당신이 k 값을 포함하는 연산 시리즈를 원한다면

스텝 크기 rN에있는 합계, 당신은 당신이 다시 정렬 할 수 있습니다

sum(x, x + r, x + 2*r, ... x + (k - 1) * r) 

    == k * (2 * x + (k - 1) * r)/2  # by Gauss 

    == N  # by the problem definition 

이 보면

min == x == N/k - (k - 1) * r/2 

max == x + (k - 1) * r == N/k + (k - 1) * r/2 

찾을 수 그것을 그러한 일련의 중간 값은 N/k이어야합니다. 즉, N = 150 및 k = 100의 예를 사용하면 중간 값은 1.5 여야합니다. 따라서 min = 1이고 max = 4는 불가능합니다.

+0

맞습니다. 분과 최대를 쉽게 선택할 수 없습니다. – Nish

0

귀하의 문제는 우리가 사전에 목록의 sum 및 최소/최대 값을 알고있는 경우에 우리는, 우리가 minValue에서 maxValue에 걸릴 얼마나 많은 steps 계산할 수 있다는 것을 의미 arithmetic list (수학)입니다.

arithmetic listsum 얻기위한 방정식은 다음과

n = theSum*2/(minNum + maxNum) 

:

// The sum of the list 
theSum = n*(minNum+maxNum)/2 

우리는 지금 n (값의 수는 우리가 minNummaxNum 포함되어 있어야합니다)에 대해 해결할 수 프로그램 :

theSum = 12.0 
minNum = 1.0 
maxNum = 5.0 
n = int(theSum*2/(minNum + maxNum)) 

print(np.linspace(minNum, maxNum, num=n)) 

출력 :

[ 1.   2.33333333 3.66666667 5.  ] 

과 합계 확인 :

print(sum(np.linspace(minNum, maxNum, num=n))) 

출력 :

12.0 
+0

그래도 np.sum (array) = N – Nish

+0

@ Okish가 보장되지 않습니다. 나는 내 대답을 편집했다. 이제 원하는 합, 최소 및 최대 값을 지정할 수 있습니다. – Ivan86

관련 문제