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

答えは、整数について話しているか浮動小数点について話しているかによって異なります。あなたの例の数値はすべて整数であるため、それらについて話していると思います。さらに、すべての間隔に同じ数の整数が含まれていると仮定します。例 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 に答える
1

(c スタイルの) 擬似コードでは:

// 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 に答える