1. 程式人生 > >返回[0,n)中的一個隨機數

返回[0,n)中的一個隨機數

一般返回一個[0,n)的隨機數,都會使用rand()%n。rand()函式返回區間為[0,RAND_MAX]中的一個數。RAND_MAX在<cstdlib>中定義的。實際上rand()是一個偽隨機函式。並且如果n的值很大,那麼RAND_MAX就不會均勻地被n除盡,一些餘數出現的概率將會比其他的更大。假定RAND_MAX是32767,且n等於20000。則rand()將會有兩個不同的值能令rand()%n等於10000(即10000和30000),但rand()僅有一個值能讓rand()%n等於15000(即15000)。所以rand()%20000產生10000的概率是產生15000概率的兩倍。
為了避免這些缺陷,我們將使用一種不同的策略。把這些可利用的隨機數分成長度精確相等的儲存桶。我們能計算一個隨機數並返回相應的儲存桶的編號。因為儲存桶的長度相同,所以某些隨機數根本沒可能進入到任何的儲存桶中。這樣的話,我們會反覆請求隨機數,直到獲得一個合適的為止。

相關推薦

返回[0,n)一個隨機數

一般返回一個[0,n)的隨機數,都會使用rand()%n。rand()函式返回區間為[0,RAND_MAX]中的一個數。RAND_MAX在<cstdlib>中定義的。實際上rand()是一個偽隨機函式。並且如果n的值很大,那麼RAND_MAX就不會均勻地被n除盡,一些餘數出現的概率將會比其他的更大

一個整數n,寫一個函式f(n),返回0~n之間出現的“1”的個數,例如f(1)=1; f(13)=6(1,10,11,12,13一共6個1),最大的f(n)=nn是多少

import java.util.Arrays; import java.util.LinkedList; import java.util.List; public class learn {   public static int jj = 0; public sta

Java實現輸入兩個整數n和m,從0-n隨意取幾個數,使其和等於m

程式設計求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。 思路: 1.首先判斷,如果n>m,則n中大於m的數不可能參與組合,此時置n = m; 2.將最大數n加入且n == m,則滿足條件,

輸入兩個整數n和m,從0-n隨意取幾個數,使其和等於m

程式設計求解,輸入兩個整數n和m,從數列1,2,3,……n中隨意取幾個數,使其和等於m。要求將所有的可能組合列出來。實際上就是一個揹包問題。 求解思路: 1.首先判斷,如果n>m,則n中大於m

給定一個只包含正整數的非空陣列,返回該陣列重複次數最多的前N個數字 ,返回的結果按重複次數從多到少降序排列(N不存在取值非法的情況)

1 """ 2 #給定一個只包含正整數的非空陣列,返回該陣列中重複次數最多的前N個數字 3 #返回的結果按重複次數從多到少降序排列(N不存在取值非法的情況) 4 解題思路: 5 1.設定一個空字典,去儲存列表中的值和值出現的次數 6 2.使用L.count()方法可以統計出L中值出現的次數

給定陣列a[0:n-1]試設計一個演算法,在最壞情況下用[3n/2 -2 ] 次比較找出a[0:n-1]元素的最大值和最小值;教材2-15

給定陣列a[0:n-1]試設計一個演算法,在最壞情況下用[3n/2 -2 ] 次比較找出a[0:n-1]中元素的最大值和最小值; 解:要求對於陣列用小於【3n/2-2】的比較次數找到兩個最值 可以用陣列第一個元素來初始化max,min 然後遍歷陣列,分別和max,min比較,一遍就可以找

給定由大寫,小寫字母和空格組成的字串,返回 最後 一個單詞的長度。 如果輸入不存在單詞,返回 0

給定由大寫,小寫字母和空格組成的字串,返回 最後 一個單詞的長度。 如果輸入中不存在單詞,返回 0。 注意: “單詞”是指不包含空格符號的字串 例如: 對於字串"hello World"(不帶引號), 那麼返回的結果是 5; 對於字串"abc "(不帶引號),那麼

一個函式返回引數二進位制1的個數+獲取一個數二進位制序列所有的偶數位和奇數位,分別輸出二進位制序列+輸出一個整數的每一位+兩個int(32位)整數m和n的二進位制表達,有多少個位(bit)不同

寫一個函式返回引數二進位制中 1 的個數 比如: 15 0000 1111 4 個 1 #include <stdio.h> #include <windows.h> /* 寫一個函式統計一個數二進位制形式下 1 的個數 */ //統計 1 的個數 int C

【演算法】計算數字k在0n的出現的次數,k可能是0~9的一個

思路: 遍歷每一個數,同時每一個數都遍歷每一位,遍歷每一位的方法是不斷地整除10,直到整除為0。 #include <stdio.h> int digitCounts(int k, int n) { int sum=0; for(int i=0;i<=n;i++)

LintCode統計數字:計算數字k在0n的出現的次數,k可能是0~9的一個

現在是2018-9-21,距離畢業還有不到兩年的時間,情況樂觀的話,我應該會在一年之內去找一份實習工作。對於找工作這件事,此刻的我還是有些惶恐,我無法確定清晰的職業方向和目標,對自己的知識儲備也不自信。為了給即將面對的求職做些準備,我覺得有必要提升自己的演算法設計能力。讀

給定一個正整數n,求出0n有幾個數滿足其二進位制表示不包含連續的1

樣例: 輸入:5 輸出:5 0 01 10 100 101滿足,11不滿足。 那麼6144呢? 答案是610,怎麼去計算呢? 思路:查詢從0到n中有多少個數包含連續的1,然後在總數中去掉這些情況,得到

找出長度為n的陣列重複的一個數字(數字範圍在0~n-1) 不採用hashmap

要求不採用hashmap public static void main(String[] args) { int[] nums = { 1, 2, 4, 3, 0 }; System.out.println(findDuplicate(nums)); Arrays.stream(num

找出長度為n的數組重復的一個數字(數字範圍在0~n-1) 不采用hashmap

static 一個 str for each light println 循環 pub 要求不采用hashmap public static void main(String[] args) { int[] nums = { 1, 2, 4, 3, 0 }; S

*(5)輸入互不相同的一組整數,構造一棵二叉排序樹,要求: ① 按遞減有序的順序輸出; ② 輸入一個整數,查詢該整數是否在該二叉排序樹,查詢成功返回1,否則返回0; ③ 在②,若查詢成功,則將該結

/*(5)輸入互不相同的一組整數,構造一棵二叉排序樹,要求: ① 按遞減有序的順序輸出; ② 輸入一個整數,查詢該整數是否在該二叉排序樹中,查詢成功返回1,否則返回0; ③ 在②中,若查詢成功,則將該結點從二叉排序樹中刪除。 */ #include<stdio.h&g

n 支隊伍比賽,分別編號為0,1,2......n-1,已知它們之間的實力對比關係,儲存在一個二維陣列w[n][n]。。。

題目: n 支隊伍比賽,分別編號為0,1,2......n-1,已知它們之間的實力對比關係,儲存在一個二維陣列w[n][n]中,w[i][j] 的值代表編號為i,j 的隊伍中更強的一支,所以w[i][j]=i 或者j,現在給出它們的出場順序,並存儲在陣列order[n]

JavaScript - 寫一個純函式 - 求陣列所有大於`1`的和, 如果都是`負數`或者`空陣列`那麼返回`0`

JavaScript  - 寫一個純函式 -  求陣列中所有大於`1`的和, 如果都是`負數`或者`空陣列`那麼返回`0` 推薦使用 第二種  function positiveSum (arr) { // 最讓人接受的方法 var total = 0;

演算法題目三:判斷陣列任意三條邊能否組成一個三角形,若能返回1,不能返回0

演算法一:正確率90%,演算法效率分0% 演算法二:正確率,演算法效率均100% public class Triangle { public static void main(String

計算數字k在0n的出現的次數,k可能是0~9的一個

例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我們發現1出現了5次 (1, 10, 11, 12) -----------------------------------------------------------------------

2. 編寫方法int fun(int n)判斷一個數n是否完數,是返回1,不是返回0。要求在main方法呼叫fun方法求出2~1000所有的完數,並輸出。

import java.util.Scanner;public class He2  {public static void main(String[] args) {          System.out.println("1000以內的完數如下:");         

0~N個數字,取指定個數的不重復數字,要求這些數字的和為指定值,求所有結果

readline tco write span count string rgs logs index 1 using System; 2 using System.Collections.Generic; 3 using System.Linq;