c 關於產生一定比例的隨機數,c 問題 rand() 預設產生的隨機數範圍

2022-03-04 23:27:25 字數 5045 閱讀 5163

1樓:匿名使用者

如果生成固定數量的兔子和狼,那麼你的思路反了,用兔子做例子,你應該用兔子的數量來迴圈,然後隨機生成位置,如果位置上已經有兔子或者狼了就重新隨機位置。

如果你想要一定的概率而不是一定的數量,那你的結構沒有大問題,但得在隨機的時候考慮他們之間的比例。比如你的比例是4:2:

1,那麼就rand()%7,得到0-3就生成草,得到4-5就生成兔子,得到6就生成狼。

2樓:匿名使用者

jackwind1987同學提議不錯,思路正確

如果你想要一定的概率而不是一定的數量,那麼用位置做迴圈,確定每個位置填什麼

rand()返回0至rand_max的整數

應判斷rand()<0.05*rand_max,生成狼

0.05*rand_max<=rand()<0.15*rand_max,生成兔子

0.15*rand_max<=rand()<0.35*rand_max,生成草

其餘大於等於0.35*rand_max,就是空地

或者按比例65:20:10:5=13:4:2:1 應該用rand()%20,再按比例分配

如果生成固定數量的兔子,狼和草,是可以用jackwind1987同學的思路的,

生成隨機的位置,往裡面填

但是當大部分位置被填之後,經常會填到重複的位置,程式效率很低

幸好你還有65%的空地,等其他填滿了就不用管了,思路還是可行的

我給個思路

先用rand()生成400個隨機數放在陣列r[400]中,然後對其進行索引排序

正序倒序都可以,生成索引陣列s[400]其中存放排序的索引

就是s中的400個數就是0-399這400個,但是順序是亂的

那樣就實現了將0~399這400個連續的整數打亂了位置

之後就網20x20的陣列填數字了,設i,j兩層從0-19的迴圈

如果s[20*i+j]<20那麼 a[i][j]=狼

如果20<=s[20*i+j]<60那麼 a[i][j]=兔子

如果60<=s[20*i+j]<140那麼 a[i][j]=草

剩下 a[i][j]=空地

c++問題 rand() 預設產生的隨機數範圍

3樓:匿名使用者

隨機數bai產生的範圍是:0-0x7fff(也就du是0到32767)

#include

#include

#include

#include

using namespace std;

void main()

{ srand( (unsigned)time( null ) ); //時間參zhi數作為種子

for(int i=0;i<32767;i++){ cout<

時間引數種dao子唯一,版然後取的數目不大於權32767個,基本能夠保證產生的隨機數唯一

4樓:匿名使用者

rand()函式可以用來產生隨機數;

rand()會返回一隨機數值,範圍在0至版rand_max 間。返回0至rand_max之間的權隨機數值,rand_max定義在stdlib.h,(其值至少為32767),運算的結果是一個不定的數,要看你定義的變數型別,int整形的話就是32767。

在呼叫此函式產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在呼叫時會自動設隨機數種子為1。一般用for語句來設定種子的個數。

5樓:二十年

0到rand_max,rand_max的值視編譯bai器而定du一般不小於32767,你可以zhi測試dao一下。可以用當前時間做專隨機數的種子保證產生的值不屬同。在程式開始之前呼叫srand((unsigned)time(null));就行了。

c++中如何控制隨機數產生概率

6樓:匿名使用者

1、在標準的c庫中函式 rand() 可以生成 0 ~ rand_max 之間的一個隨機數,其中 rand_max 是stdlib.h 中定義的一個整數,它與系統有關。

試著用下面的程式看一下編譯器的 rand_max 的值是多少?

#include

#include

int main()

//一般編譯器上輸出 rand_max = 32767)2、可以使用%取餘操作來控制隨機數的概率,比如要1/1000,使用rand()%1000即可,每次生成的數在0~999,每個數出現的概率都是1/1000。以此類推,要1/10的概率,用rand()%10即可。

7樓:匿名使用者

思路是隨機生成個n(如100)以內的數, t= random()%n;

if (t < n *p1)

else if ( t < n*(p1+p2))else if (t

c++ 產生不同隨機數

8樓:匿名使用者

一. 不指定範圍產生隨機數

用到函式rand(),函式原型為int rand(),無引數。此時會產生一個介於0~rand_max間的整數。rand_max的大小可以檢視,在include資料夾(linux在usr目錄、windows在安裝目錄)的stdlib.

h可以看到,linux下其值為2147483647(),其值與具體系統有關。

範例:二. 指定範圍產生隨機數,產生0到某個數的隨機數沒有現成的函式,但是可以通過取餘得到

範例:注意:以上兩個程式每次執行產生的結果是相同的,既是個偽隨機數。

rand()產生隨機數與具體的種子有關,當不特意用srand()獲取種子時,種子的預設值為1,因此需要用srand()函式產生不同的種子,srand函式原型:void srand(unsigned seed);為了產生不同的種子值,通常用時間作為引數值。

三. 指定範圍產生隨機數

要求:指定範圍(m,n),m、n關係不定,隨機數包括m和n想方設法,把範圍(m,n)改變到(0,x),到最後再轉移回去。三種情況範例:

9樓:匿名使用者

你可以把srand((unsigned)time(null));這個種子設定函式放到迴圈外面啊!

10樓:匿名使用者

srand((unsigned)time( null )*j );

c++生成隨機數,要求在1-10之間,並且每次生成的值都不一樣,該如何解決,請詳細!

11樓:匿名使用者

樓上中間部分改一下應該就ok了

比較懶,直接借用樓上的了,別介意哈(純手打,寫錯了自行調整一下int j; // 用來檢查重複

static int a[0]=;

cout<<"這是一個隨機生成10個數字的程式,生成的數在1到10之間...."<

for(i = 0; i < 10; ) // 下標遞增放後面處理++i; // 準備下一個數下標}

12樓:檀衛傑

程式如下,望採納!

#include

# include "stdlib.h"

# include"time.h"

using namespace std;

int main()

cout<

cout<<"輸出產生的20個數字"<

int j=0;

for(;j<20;j++)

cout<

return 0;}

13樓:匿名使用者

生成時比較下,重複的刪掉就好了唄。

在c++中如何產生1~9(包括1,9)和5~10(包括5,10)之間的隨機數??

14樓:匿名使用者

#include "iostream.h"

#include "stdlib.h"

#include "stdio.h"

void main()

15樓:匿名使用者

1~9;

n=rand()%9+1;

5~10;

n=rand()%6+5;

怎麼控制 c++生成隨機數的範圍

16樓:風若遠去何人留

c++的隨機數函式為rand(), 可以獲得一個非負整數的隨機數。

要讓隨機數限定在一個範圍,可以採用模除加加法的方式。

要產生隨機數r, 其範圍為 m<=r<=n,可以使用如下公式:

rand()%(n-m+1)+m

其原理為,對於任意數,

0<=rand()%(n-m+1)<=n-m於是0+m<=rand()%(n-m+1)+m<=n-m+m即m<=rand()%(n-m+1)+m<=n

17樓:匿名使用者

a=ranf()%33+1

注意:你說「a=rand()%33

這樣可以控制隨機數是在0-33範圍內」是錯的,是0-32讓a和b產生的隨機數不重複可以加條件判斷

18樓:

a = rand()%33

a的範圍是0~32

b = a+1;

b的範圍是1~33

用if語句判斷

如:if(a == b)

continue;

19樓:匿名使用者

a=rand()%33+1;

dowhile(b==a);

20樓:匿名使用者

這是之前經常去的 k a ɲ 3 p ● c ɲ還算可以 不少都是蠻漂亮的女主角;;

;;;;

;長大後驀然回首,你才會知道

相愛就不會永遠不曾有傷痕,幸福就是很簡單的生活好像只能如此了,不敢去奢求,如木棉一般

歌聲繞耳。只是為何入耳卻如此的讓人心殤

你是首長我是兵,你說衝鋒我不敢猶豫

那曾經以為的花好月圓,愛情只是宿命擺下的一個局。

c 產生隨機數的程式,C 產生隨機數的程式

要看r的 了吧。如果r的 是某個和時間有關的數 就可以解釋了 後三句就是 讓某個在65536和0之間的數除以65536獲得0和1之間的隨機數 r 2053.0 r 13849.0 這是兩個有個是素數吧 應該是的 2053就是 質因數分解13849 11 1259 那麼這兩個素數的公倍數大於65535...

c語言怎樣產生一定範圍的隨機數C語言怎樣產生一定範圍的隨機數?

編譯環境為 vs2013 產生1到3的整型隨機數的 如下 include include include define max 3 這個函式的意義為 隨機生成最大的數為3 define min 1 這個函式的意義為 隨機生成最小的數為1 int main 在c語言中,rand 函式可以用來產生隨機數...

c 中生成隨機數時的種子問題,關於C 的隨機數的種子的設定問題

先糾正一下錯誤,是srand unsigned int time 0 srand的形參是unsigned int型別的 這句話只要寫一次,一般情況下只能寫一次 隨機數是隨機的數,但計算機不可能產生隨機數,計算機根據你的輸入,再跟一個演算法就產生一個特定的序列.只要你給計算機一個相同的數,計算機返回的...