簡體   English   中英

簡單的Rand()函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM