演算法 隨機不重複數列生成

2021-09-06 20:47:33 字數 1686 閱讀 7062

今天上班的時候網上看到題目很簡單,題目是這樣的:給定乙個正整數n,需要輸出乙個長度為n的陣列,陣列元素是隨機數,範圍為0 – n-1,且元素不能重複。比如 n = 3 時,需要獲取乙個長度為3的陣列,元素範圍為0-2;簡單的理解就是生成乙個無序的隨機數組,在路上想了一下回來用三種方式方式實現了一下;oc實現了一下,文章最末尾順便有c#的是實現方法;

while基本上學過語言的最開始的流程分支語句都會涉及到while,如果存在就一直隨機,不存在就跳出判斷,一般最開始想到都是這樣方法:

+ (nsarray *)getresultone:(nsinteger)count

第二種方式其實說起來寫**葉遇到過這種情況,有點類似於從箱子中取球,放回去和不回去的這種模式,如果箱子中的每個球顏色都不一樣就是取出來就不放回去,那麼取的下乙個一定和之前的顏色不一樣,具體實現:

+ (nsarray *)getresulttwo:(nsinteger)count

nsarray *arr=nil;

arr=[arrayrandom getresultfour:5];

for (nsinteger i=0; i<[arr count]; i++)

class program

console.readkey();

}/// /// 迴圈判斷隨機出來的數字是否在陣列中

///

///

///

public static int solveproblemwayone(int count)

resultlist.add(number);

}return resultlist.toarray();

}/// /// 按照順序生成乙個陣列

///

///

///

public static int solveproblemwaysecond(int count)

int maxindex = count;

random random = new random();

for (int i = 0; i < count; i++)

return resultlist.toarray();

}/// /// 不刪除資料,然後的問題就是給最後的東西賦值

///

///

///

public static int solveproblemwaythird(int count)

int minindex =0;

random random = new random();

for (int i = 0; i < count; i++)

return resultlist.toarray();

}/// /// 簡潔方式

///

///

///

public static int solveproblemwayfour(int count)

int minindex=0;

random random = new random();

for (int i = 0; i < count; i++)

return resultlist.toarray();

} }

}

也談生成不重複數的演算法

剛剛看到有人寫生成不重複的隨機數的三種方法 正好在幾年前我也有過類似的要求,實現類似於雙色球隨機選號的功能,也就是在m個數中選取n個不重複的數 m n 0 下面我也談談我曾經用過的幾種做法,也算是對作者提出的方法的一種補充吧。一 利用contains 判斷法 思路是每次在制定範圍中隨機生成乙個隨機數...

生成不重複的隨機數演算法

有時我們需要從指定的數值範圍內隨機產生乙個數,利用這個偽隨機數去實現自己想要實現的東西。在園子裡看了不少好文章和 發現zhoufoxcn實現這個演算法的思路很好,尤其是第三個方法,效率較好,便把這一skill記載了下來,雖然我們可以用諸如random rand new random guid.new...

一種生成不重複數的演算法

在程式設計中經常遇到一些類似的問題,比如做乙個雙色球選號軟體,其中6個雙色球是從1到33之間選出6個數來,這6個數是不能重複的,這個問題就是我們今天要說的生成不重複數演算法。演算法描述如下 從m個數中選出n個數來 0下面要介紹的演算法是,每次隨機取出乙個數,之後將該數放置到集合的末尾去,這樣下次取隨...