13

Java で 7 つのスロットを持つ配列をランダムに生成する必要があります。これらのスロットはすべて LEAST 1 の値を持つ必要がありますが、組み合わせると、別の定義された数の合計値になります。また、それらはすべて int 値である必要があり、1.5 または 0.9816465684646 の数値ではありません。例:

int a=10;

int[] ar = new int[7]
ar[0] = 1
ar[1] = 1
ar[2] = 2
ar[3] = 2
ar[4] = 1
ar[5] = 2
ar[6] = 1

そのようなものを生成したいのですが、int a = 15の場合、すべての数字の合計は任意の順序で15になります

4

4 に答える 4

2

@Konが言ったことに加えて、ランダム性を高めるために、1つではなく2つの乱数を使用できます。あれは:

Fill every element in the array with the value 1
valuesToDistribute = a - array.length-1
randomIndex = Roll a number between 0 and array.length-1
randomValue = Roll a number between 1 and valuesToDistribute
Add to randomIndex the value randomValue
Subtract randomValue from valuesToDistribute
Repeat until valuesToDistribute = 0
于 2013-09-03T20:18:48.060 に答える
1

私のJavaはひどいので、おそらく間違っているので、ここでは実際のコードを提供していません。私は以前にSQLでこれとまったく同じことをしたことがあるので、それが機能することはわかっています...

  1. Y を要素を合計する合計値にします。
  2. 1 から X までの変数 Z でループを開始します。ここで、X は配列内の要素数です (ここでは AR と呼ばれます)。
  3. ループ内で、AR(Z) を 1 と Y-X+Z の間の乱数に設定します。
  4. Y から新しい値を引きます。Y = Y - AR(Z)
  5. ループの終了 : ステップ 2 に戻り、Z を 1 進めます
于 2013-09-03T20:18:11.697 に答える