2013-04-27 62 views
0

儘管我試圖爲自己代碼的基本抽獎程序(注意,我真的初學編程特別是C#),在計算器上一個人給我在最小和最大的值是隨機的,ENLIGHT我

rnd.Next(1, 50 * 7) % 50 // Randoming like that will be increase to chance of getting 1 and 49 
rnd.Next(1, 50) // instead of this 

說我真的想知道我們如何測試它?我們可以依靠這個測試嗎?請給我點亮

+4

首先,您可以從第一個表達式中返回'0',而您不能從第二個表達式中返回'0'。 – 2013-04-27 11:27:52

+0

我們如何得到0?我們將1和49之間的數字相乘,然後乘以7和模式50 – 1342 2013-04-27 11:34:14

+2

@ 1342想象一下,rnd.Next(1,50 * 7)返回100.當100除以50(即100%5)是0.順便說一句:'rnd.Next(1,50)'返回1到49之間的數字,*不* 1到50之間。 – 2013-04-27 11:37:54

回答

5

最後一個例子將得到1到49之間的均勻分佈(包含)。也就是說,對於(和包括)1和49之間的任何數字,相同的機會。

第一個示例更棘手。它將首先創建1到349之間的任何數字。模數50將數字映射到間隔0-49(包括0和49)。

我們現在介紹獲得0的可能性 - 如果隨機數是50,100,150,200,250或300. 我們也可以通過N + 0,N + 50,N + 100,N + 150,N + 200,N + 250,N + 300

也就是說,有6次機會讓0和7得到任何其他數字。

結論是,第一個例子將給出0-49(含)之間的隨機數,其中0的機會略小於其他數字。

+0

一個正確的分析(我寫了一個快速測試程序,與您的分析結果一致)。 – 2013-04-27 12:02:46

+0

很好玩先生。 – 1342 2013-04-27 12:14:03

相關問題