2011-01-06 60 views
0

我需要從1到9(無0)的隨機數。C++隨機數1-9

//numbers 0 to 9 
int iRand = rand() % 10; 

但我需要1到9

感謝。

+0

好的,我很年輕,需要的時間... – Ilyssis 2013-01-31 12:56:34

回答

14

就在:

int iRand = (rand() % 9) + 1; 
+0

雅謝謝!而已。 – Ilyssis 2011-01-06 23:48:22

1

嘗試:

int iRand = 1 + rand() % 9; 

它的工作原理,採取了隨機數從0到8,然後添加一個到它(雖然我以相反的順序寫的那些操作在代碼中 - 你首先回到個人偏好)。

請注意,%的優先級高於+,所以括號不是必需的(但可能會提高可讀性)。

0

如何

int iRand = (rand() % 9) + 1; 

DOH按秒

6

好打,你知道如何獲得一個隨機整數範圍在[0,X],對不對?這就是:

rand() % (x + 1) 

在你的情況,你已經設置x到9,給你rand() % 10。那麼如何操縱範圍達到1-9?那麼,既然0走出這個隨機數發生器方案的最小值,我們知道我們需要添加一個有最少一個:

rand() % (x + 1) + 1 

現在你得到的範圍[1,X + 1]。如果我們假設爲[1,9],則x必須是8,贈送:

rand() % 9 + 1 

這就是你應該如何看待這些事情。

+0

你沒事:) – Ilyssis 2011-01-06 23:51:55

1

初始化隨機數發生器呼叫srand(time(0));然後,向整數x設置爲一個值low(含)和high之間(不包括):

int x = int(floor(rand()/(RAND_MAX + 1.0) * (high-low) + low)); 

floor()是不必要的,如果高和低的兩者都是非負面的。

對於隨機數使用模數(%)是不可取的,因爲您不會在低位中獲得很大的變化,所以您會發現分佈非常微弱。

0

無論答案是否摘下,基於模的範圍都是有偏見的。你可以在互聯網上找到。所以,如果你真的關心這個,那麼你必須做更多的比(假設arc4random()返回一個4字節的整數):

#define NUMBER 9.0 
#define RANDOM() (((int)(arc4random()/(float)0xffffffff * (float)NUMBER) + 1) % (NUMBER + 1)) 

我把它留給你,因爲你的聲音找出正確的語法像一個非常有能力的開發者

+0

我的情況我不需要隨機數的均勻分佈。但是,謝謝你的提示......; ) – Ilyssis 2011-01-07 10:08:15