3

比率のリストがパーセントで表示されているとしましょう。

Map<Integer, Integer> ratio = new HashMap<Integer, Integer>();
ratio.put(0, 10);
ratio.put(1, 50);
ratio.put(3, 40);

次に、2次元配列があります。

int[][] arr = new int[50][50];

ここで、定義された値をランダムに、しかし均等に、それぞれの比率で01およびその配列に分散させたいと思います。3105040

それ、どうやったら出来るの?

4

1 に答える 1

3

1D 配列を最初の 0、2 番目の 1、次に 3 で埋めます。

何かのようなもの:

int arr[N][M] = //;
int array[N*M] = //;
int total_array_2D_size = N * M;
int j = 0;
Set<Map.Entry<Integer, Integer>> set = ratio.entrySet();  

for (Map.Entry<Integer, Integer> entry : set)
{
    int k = entry.getKey();        // Take the number
    int ratio = entry.getValue();  // Take the ratio
    int N = (total_array_2D_size * ratio) / 100; // The number of times 'k' should
                                                 // appear on the finally 2D array

    for(int i = 0; i < N; i++,j++) array[j] = k; // Fill the 1D array
}

Shuffle アルゴリズムを使用して、1D 配列を suffle するよりも。最後に、2D 配列を埋めます。

for(int i = 0,k = 0; i < N; i++)
  for(int j = 0; j < M; j++,k++)
     arr[i][j] = array[k];

2D 配列には 2500 の位置 (50^2) があるため、最終的には 250 '0' (0.10 * 50^2)、1250 '1' (0.50 * 50^2)、および 1000 '3' (0.4 * 50^2)。

于 2012-11-17T22:29:37.957 に答える