簡體   English   中英

嘗試一次取一個隨機數

[英]Trying to take 1 random digit at a time

我是cpp編程的新手,也是stackoverflow的新手。

我有一個簡單的情況,一個問題花了比合理的時間更多的時間來解決,所以我想在這里問。

我想一次從rand()中取一位數。 我設法去除了數字,但由於將其用作數組索引,因此無法將其轉換為所需的int

有人可以幫忙嗎? 我會很感激的。

另外,如果有人有很好的解決方案來獲得以10為基數均勻分布的隨機數,我也想這樣做……當然,由於rand max並非全為9,我們就沒有這個。

韓國電信

好了,您可以使用模運算符獲得蘭德返回的數字。

int digit = rand()%10;

關於第一個問題,如果您有字符數字,則可以減去'0'的值以獲得數字。

int digit = char_digit - '0';

如果想要一個0到9的均勻分布,可以

  1. 假設rand()本身是均勻分布的。 (並不總是一個很好的假設。)

  2. 根據需要再次調用rand()

     int ran10(void) { const static int r10max = RAND_MAX - (RAND_MAX % 10); int r; while ((r = rand()) >= r10max); return r%10; } 

例:
如果RAMD_MAX為32767,則r10max的值為r10max將扔掉32760到32767范圍內的所有rand值,並獲取一個新的隨機值。

盡管不如rand() % 10這樣的模數算法實現快,但它會返回均勻分布的整數,並避免某些偽隨機數生成器中發生的最低有效位出現周期性(請參閱http://www.gnu.org)。 /software/gsl/manual/html_node/Other-random-number-generators.html )。

int rand_integer(int exclusive_upperbound)
{
        return int((double)exclusive_upperbound*rand()/RAND_MAX);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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