我想創建一個數組,其中有21個值在0到20之間。我希望它們是隨機的,同時不重複。如何創建一個非重複的rand數字的數組
我知道如何創建0之間的隨機數到20
0 + rand()/(RAND_MAX/(20-0+1)+1)
但我不知道如何創建這些數字使得它不重複比較以前的數字
我想創建一個數組,其中有21個值在0到20之間。我希望它們是隨機的,同時不重複。如何創建一個非重複的rand數字的數組
我知道如何創建0之間的隨機數到20
0 + rand()/(RAND_MAX/(20-0+1)+1)
但我不知道如何創建這些數字使得它不重複比較以前的數字
這聽起來像你讓它比必要更難。你爲什麼不創建一個數字1-20的數組,然後通過一個shuffle隨機化它。
您可以使用Set<Integer>
添加rands直到大小爲20,然後轉儲到數組。
如果您需要性能,請使用Guava的HashSet
或Trove的TIntSet
。
我實際上正在創建0到20之間的值的二維數組。引用@ Oli的ans之後。我寫了我的答案:
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,然後洗牌,這將保證每個元素的唯一性。 – 2012-02-23 15:41:14