<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 問題描述 **如何生成位于0到n-1之間的k個不同的隨機順序的隨機整數?**(來源于**《編程珠璣》第2版**的第1章中第7頁習題4) ### 方法1 在使用Random類時,每次選擇不同的隨機因子并在Next中劃定范圍。這種方法簡單容易實現,看上去似乎是可以滿足需求的,但我不知道怎么去證明 ~~~ static void GenRandoInt1(int n , int [] array, int range); void Main(string[] args){ int n = 1000000; int[] array = new int[n]; int range = 5000000; GenRandomInt1(n, array, range); Console.ReadKey(); } void GenRandomInt1(int n, int[] array, int range){ ?Random random; for (int i = 0; i < n; i++){ random = new Random(DateTime.Now.Millisecond + i); array[i] = random.Next(0, range); random = null; } } ~~~ ### 方法2 使用內置的HashSet容器,在每一次獲取范圍內隨機數時判斷容器內是否已經存在有這個隨機數,如果存在就重新算一個隨機數。 ~~~ static void GenRandomInt1(int n, int[] array, int range); static void GenRandomInt2(int n, int range, HashSet<int> hashArray); void Main(string[] args){ int n = 1000000; int[] array = new int[n]; int range = 5000000; HashSet<int> hashArray = new HashSet<int>(); GenRandomInt1(n, array, range); GenRandomInt2(n, range, hashArray); Console.ReadKey(); } void GenRandomInt2(int n, int range, HashSet<int> hashArray){ Random random = new Random(); int i = 0; for (i = 0; i < n; i++){ int temp; do { temp = random.Next(0, range); } while (hashArray.Contains<int>(temp)); hashArray.Add(temp); } } void GenRandomInt1(int n, int[] array, int range){ Random random; for (int i = 0; i < n; i++){ random = new Random(DateTime.Now.Millisecond + i); array[i] = random.Next(0, range); random = null; } } ~~~ 網上還有一種不用hash的方法,遞歸判斷數組中是否存在已有的隨機數,在這里就不多寫。 ### 方法3 找一個gcd(n,m)==1的數m,設一個起點x,那么x=(x+m)%n可以將所有的小于n的數遍歷,為了產生視覺更加隨機的感覺,可以把方程寫為x=(x+m*p)%n,p這里是個素數。利用這個公式可以產生等概率而且不重復的k個隨機值。 ### 書上答案 ~~~ for i = [0, n) x[i] = i for i = [0,n) swap(i, randint(i, n-1)) print x[i] ~~~ **轉載請注明出處**:[http://blog.csdn.net/utimes/article/details/8761541](http://blog.csdn.net/utimes/article/details/8761541)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看