2012-02-23 68 views
2

我想創建一個數組,其中有21個值在0到20之間。我希望它們是隨機的,同時不重複。如何創建一個非重複的rand數字的數組

我知道如何創建0之間的隨機數到20

0 + rand()/(RAND_MAX/(20-0+1)+1) 

但我不知道如何創建這些數字使得它不重複比較以前的數字

+2

提示:創建一個數組,序列值從0到20,然後洗牌,這將保證每個元素的唯一性。 – 2012-02-23 15:41:14

回答

5

你可能要使用類似的東西。

+0

真棒..非常感謝... – lakesh 2012-02-23 15:42:41

2

這聽起來像你讓它比必要更難。你爲什麼不創建一個數字1-20的數組,然後通過一個shuffle隨機化它。

0

您可以使用Set<Integer>添加rands直到大小爲20,然後轉儲到數組。

如果您需要性能,請使用Guava的HashSet或Trove的TIntSet

0

我實際上正在創建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; 
    } 
    } 
}