我想用1-10的隨機數填充數組,並且不重複。我試圖用遞歸來做到這一點。我試圖與遞歸和沒有(這裏是兩個,沒有任何運氣)。我有兩個代碼,boths不工作:隨機填充一個數組,不需要重複
1:
static int reco(int arr,int[] times)
{
Random rnd = new Random();
arr = rnd.Next(1, 11);
return times[arr] > 0 ? reco(arr, times) : arr;
}
static void Main(string[] args)
{
int i = 0;
int[] arr = new int[10];
int[] times = new int[11];
Random rnd = new Random();
for (i = 0; i < 10; i++)
{
arr[i] = rnd.Next(1, 11);
times[arr[i]]++;
if (times[arr[i]] > 0)
arr[i] = reco(arr[i], times);
}
2:
static int reco(int arr,int[] times)
{
Random rnd = new Random();
arr = rnd.Next(1, 11);
if (times[arr] > 0)
return reco(arr, times);
else
return arr;
}
static void Main(string[] args)
{
int i = 0;
int[] arr = new int[10];
int[] times = new int[11];
Random rnd = new Random();
for (i = 0; i < 10; i++)
{
arr[i] = rnd.Next(1, 11);
if (times[arr[i]] > 0)
arr[i] = reco(arr[i], times);
times[arr[i]]++;
}
}
請說明你的分析,它是「不工作」。 – 2013-02-14 22:16:45
如果你的意思是以隨機順序填充數組0..N,那麼標準的做法是首先用數組0..N填充數組,然後迭代數組並交換每個數組價值與另一個在陣列中的隨機位置 - 即洗牌。 – 2013-02-14 22:19:31