Найти арифметику c прогрессии между двумя числами - PullRequest
0 голосов
/ 30 марта 2020

У меня есть два числа, и мне нужно найти арифметическую c последовательность между этими двумя числами таким образом, чтобы она всегда содержала число ноль .

Ниже мой код.

var numberOfPoints = 6;
var min = -5;   
var max = 10;
var step = (max - min) / numberOfPoints;
var pointsArray = [min];
var point = min;
for (var i = 0; i < numberOfPoints; i++) {
   point = point + step;
   pointsArray.push(+point.toFixed(2));
}
console.log(pointsArray); //[-5, -2.5, 0, 2.5, 5, 7.5, 10]

Код работает нормально.

Но если я изменю min = -7, я получу [-7, -4.17, -1.33, 1.5, 4.33, 7.17, 10], который отсутствует ноль .

Ниже приводится ситуация

  1. numberOfPoints фиксировано min и max изменяется.
  2. min всегда отрицательно max может или не может быть отрицательным.
  3. A negative threshold value можно добавить к min, чтобы получить арифметическую c прогрессию с номером ноль .

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Эта задача не решаема

Following is the situation

- numberOfPoints is fixed min and max varies.
- min is always negative max may or may not be negative.
- A negative threshold value can be added to min to get an arithmetic progression having number zero in it.

Доказать: numberOfPoints= 6, min=-1000 и max=1, вы не можете получить arithmetic progression за 6 шагов с нулем, потому что за 6 шагов минимальная разница составляет шаг равен 1001/6=166.86, а если вы включите 0, максимальное значение шага должно быть 1, чтобы не превысить максимум.

Добавление отрицательного порога не имеет значения, поскольку оно только увеличивает значение step.

PS: я проигнорировал этот шаг в приведенном выше примере min is always negative max may or may not be negative., потому что этот шаг еще проще доказать, что он не разрешим. min=-10, max=-9, между ними нет нуля, и добавление отрицательного порога не меняет его.

0 голосов
/ 30 марта 2020

/*

min and max must have opposite signs, because there's no zero between two negative numbers
but they cannot be arbitrary, they have to satisfy a condition

if the k-th term of the progression is zero then min + k * step = 0 or 
min + k * (max - min) / numberOfPoints = 0 
from which k = - numberOfPoints * min / (max - min)
the condition is that - numberOfPoints * min / (max - min) must be an integer 
in the interval [1, numberOfPoints]
otherwise there's no solution

in the first example that you have (-6) * (-5) / (10 - (-5)) = 3
but in the second (-6) * (-7) / (10 - (-7)) = 2.470588235294118
(-4, 2), (-3, 3), (-2, 4) will all work, but (-2, 3) won't

*/
...