2012-02-22 4 views
-1

私は月のリスト(TOTAL_NUM_MONTHS)を与えられています。このリストからは比例して12ヶ月だけを選択する必要があります。ヶ月の合計数は12、その後小さい場合与えられた月のリストからの月の比例配分

IF TOTAL_NUM_MONTHS<12 THEN 
    STEP = 1 
ELSE IF (TOTAL_NUM_MONTHS % 12 == 0) THEN 
    STEP = TOTAL_NUM_MONTHS/12 
ELSE 
    STEP = ??? 

だから、私はそれらのすべてを選択し、それが12に割り切れるならば、私はに等しいステップでそれらを選択します:私は今までのアルゴリズムを以下していますTOTAL_NUM_MONTHS/12

質問:合計月数が12に割り切れない場合はどうすればよいですか?比例的に与えられた月のリストから12ヶ月を選択するためにステップをどのように計算するのですか?

+0

Plsは、ダウン投票の理由でコメントを残します。 – Bakhtiyor

答えて

1

たぶん、あなたは、各反復のために様々な長さのステップを取る必要があります、のようなもの:

step(i) = step(i-1) + NUM_MONTHS/12.0step(0) = 0.0 [注:ステップ(i)は浮動小数点数ではなく整数である]

と使用floor(step(i))は要素を選択します。 [ここではNUM_MONTHS > 12とする]

iはステップ番号です。 0 <= i < 12

均等に分布する単調増加関数を作成することです。それは浮動小数点でNUM_MONTHS/12サイズより均一になることはありません。したがって、浮動小数点数で計算してから、floor(step(i))を使用して整数を取得します。どの要素が選択されていない

  1. [NUM_MONTHS/12 > 1ため】各2つのステップの間の最大差が1である:

    この方法は、2つのことを確実にします。

NUM_STEPS % 12 == 0このメソッドは、else ifに崩壊し、同じように動作します。

+0

私はここにいますか?あなたの視点をもう少し詳しく教えてください。 – Bakhtiyor

+0

@Bakhtiyor:私は編集し、いくつかを明確にしました。あなたがこの答えでまだ誤解していることがあるかどうかを教えてください。 – amit

+0

それが私の必要なものです。どうもありがとうございました。 – Bakhtiyor

関連する問題