0

提供以下值

  1. 起始值 = 1
  2. 最终值 = 20
  3. 间隔 = 5

我得到了一个数字 6。我必须找到数字 6 所在的数字范围,现在答案是 6-10。

如果给定的数字大于结束值,则返回相同的数字。

有什么公式可以让我生成数字的范围吗?

更新

我尝试了以下解决方案,但是如果更改范围间隔,它就不起作用,

 $end_value = $start_value + $range_interval;

// we blindly return the last term if value is greater than max value
if ($input_num > $end_value) {
  return '>' . $end_value;
}

// we also find if its a first value
if ($input_num <= $end_value && $value >= $start_value) {
  return $start_value . '-' . $end_value;
}

// logic to find the range for a given integer
$dived_value = $input_num/$end_value;

// round the value to get the exact match
$rounded_value = ceil($dived_value);

$upper_bound_range = $rounded_value*$end_value;

$lower_bound_range = $upper_bound_range - $end_value;

return $lower_bound_range . '-'. $upper_bound_range;
4

2 回答 2

1

在(c-style)伪代码中:

// Integer division assumed
rangeNumber = (yourNumber - startValue) / rangeLength;
lower_bound_range = startValue + rangeNumber*rangeLength;
upper_bound_range = lower_bound_range + rangeLength-1;

对于您的输入:

rangeNumber = (6-1)/5 = 1
lower_bound_range = 1 + 5*1 = 6
upper_bound_range = 10

所以范围是 [6, 10]

于 2013-01-29T10:01:58.713 回答
1

答案取决于您谈论的是整数还是浮点数。由于您所有的示例数字都是整数,我假设您谈论这些。我进一步假设您的所有区间都包含相同数量的整数,在您的示例 5 中,即 1...5、6...10、11...15 和 16...20。请注意,第一个区间中不包含 0(否则第一个区间有 6 个数字)。
在这种情况下,答案很简单。
假设:
s 不包含在第一个区间中的起始值,
i 区间大小,即它包含的整数个数,
p 提供的应分配区间的数字,
b 此区间中的第一个整数,和
e 这个区间的最后一个整数。
然后:
b = s + (ps-1)\i * i + 1 (这里,“\”表示整数除法,即没有余数)
e = b + i - 1
在你的例子中:
s = 0, i = 5, p = 6,因此
b = 0 + (6-0-1)\5 * 5 + 1 = 6
e = 6 + 5 - 1 = 10

于 2013-01-29T11:42:22.403 回答