0から20の間の21の値を持つ配列を作成したいと思います。それらをランダムに、同時に繰り返さないようにしたいと思います。反復されないrand番号の配列を作成する方法
私は20
0 + rand()/(RAND_MAX/(20-0+1)+1)
に0の間の乱数を作成する方法を知っているが、私はそれはあなたが前の番号に
0から20の間の21の値を持つ配列を作成したいと思います。それらをランダムに、同時に繰り返さないようにしたいと思います。反復されないrand番号の配列を作成する方法
私は20
0 + rand()/(RAND_MAX/(20-0+1)+1)
に0の間の乱数を作成する方法を知っているが、私はそれはあなたが前の番号に
これは、必要以上に難しくなっているようです。なぜ1から20までの数字の配列を作成し、それをシャッフルでランダム化しないのですか?
サイズが20になるまで、Set<Integer>
を使用してランを追加し、次に配列にダンプします。
パフォーマンスが必要な場合は、GuavaのHashSet
またはTroveのTIntSet
を使用します。
私は実際には@ Oliのansを参照して0から20までの値を持つ2次元配列を作成していました。私は答えを書いた:
int arr[2][6] = {{0,1,2,3,4,5,6}, {7,8,9,10,11,12,13},{14,15,16,17,18,19,20}};
void rearrange_num(int *p)
{
int temp = 0;
for(int i = numRows -1 ; i > 0 ; i--)
{
for (int j = numCols-1;j>0; j--)
{
k = 0 + rand()/(RAND_MAX/(2-0+1)+1);
l= 0 + rand()/(RAND_MAX/(6-0+1)+1);
temp = p[i][j];
p[i][j] = p[k][l];
p[k][l] = temp;
}
}
}
ヒント:0から20までの連続した値を持つ配列を作成し、それをシャッフルすると、これは各要素の一意性を保証する。 –