[英]Simple Rand() function
使用以下原型編寫函數。 int getRandomIntFrom0ToK(int K)該函數調用隨機數生成器,該生成器生成均勻分布在間隔[0,1]中的隨機值,並為正整數K返回均勻分布在整數{0,1,2,上的隨機數。 ..K}。 編寫程序測試該函數,該函數將顯示函數生成的隨機整數以大約相等的概率命中{0,1,2,... K}中的每個數字。
那么,為什么會有兩個間隔?
{0,K}是可以理解的,但是為什么[0,1]是必需的?
我不知道到目前為止我在做什么:
#include <stdio.h>
int getRandomIntFrom0toK(int K)
{
int i=0;
printf("enter k:");
scanf("%d",&K);
while (i<K)
{
int num=(rand()%(K-1)+1);
printf("%d\n",num);
i++;
}
}
int main(void)
{
int result=getRandomIntFrom0toK(1+rand()%(1));
return 0;
}
間隔[0,1]通常是隨機數生成器返回“實數”(即浮點數而不是整數)時可能返回的時間間隔。 這是不是你想要的,這就是你給什么作為一個隨機數發生器。 您的任務是將結果轉換為所需的值,該值是0到K之間的整數。
碰巧的是,C rand()函數返回一個int而不是浮點數,因此如果您正在測試代碼,則可能要除以RAND_MAX以獲得相同的效果。
通過將結果乘以K將其轉換為[0,K]范圍,然后加上偏移量L將其轉換為[L, L + K]。 因此,例如,如果您想要一個介於-2和+2之間的數字,則可以執行以下操作:
float x = rand() / (float) RAND_MAX; /* x is between 0 and 1 */
x = x * 4; /* x is now between 0 and 4 */
x = x - 2; /* x is now between -2 and 2 */
在您的情況下,您需要一個0到K之間的整數,而不是浮點數。因此,一旦完成轉換,就可以舍入到最接近的整數。 但是,您需要小心選擇正確的范圍,以使0和K與任何中間整數一樣大,並且永遠不會獲得超出范圍的值(例如-1或K + 1)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.