『壹』 c語言中獲得隨機數的方法
問題1: 怎樣獲得一個真正的隨機數?要知道,rand()是不能產生真正的隨機數的!即使不能產生真正的隨機數,也要大概接近呀!而rand()好象每次的隨機都一樣。
專家解答:
之所以rand()每次的隨機數都一樣是因為rand()函數使用不正確。各種編程語言返回的隨機數(確切地說是偽隨機數)實際上都是根據遞推公式計算的一組數值,當序列足夠長,這組數值近似滿足均勻分布。如果計算偽隨機序列的初始數值(稱為種子)相同,則計算出來的偽隨機序列就是完全相同的。這個特性被有的軟體利用於加密和解密。加密時,可以用某個種子數生成一個偽隨機序列並對數據進行處理;解密時,再利用種子數生成一個偽隨機序列並對加密數據進行還原。這樣,對於不知道種子數的人要想解密就需要多費些事了。當然,這種完全相同的序列對於你來說是非常糟糕的。要解決這個問題,需要在每次產生隨機序列前,先指定不同的種子,這樣計算出來的隨機序列就不會完全相同了。你可以在調用rand()函數之前調用srand( (unsigned)time( NULL ) ),這樣以time函數值(即當前時間)作為種子數,因為兩次調用rand函數的時間通常是不同的,這樣就可以保證隨機性了。你也可以使用srand函數來人為指定種子數。Windows 9x/NT的游戲FreeCell就允許用戶指定種子數,這樣用戶如果一次游戲沒有成功,下次還可以以同樣的發牌結果再玩一次。
問題2: 我按照上述方法並不能產生隨機數,僅產生公差為3或4的等差數列:
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
#include <time.h>
void main()
{
for(int i=0;i<100000;i++)
{
srand( (unsigned)time( NULL ) );
cout<<rand()<<endl;
}
}
專家解答:
你的程序是有問題的,你每產生一個隨機數之前,都調用一次srand,而由於計算機運行很快,所以你每次用time得到的時間都是一樣的(time的時間精度較低,只有55ms)。這樣相當於使用同一個種子產生隨機序列,所以產生的隨機數總是相同的。你應該把srand放在循環外:
srand( (unsigned)time( NULL ) );
for(int i=0;i<100000;i++)
{
//相關語句
}
『貳』 C語言隨機數序列編程:用C語言程序編寫。生成隨機數序列。范圍:1-15要求生成1-15的隨機序列,中間無重復
//希望您你有幫助!
#include <stdio.h>
#include <time.h>
int main()
{
int a[15] = {0};
int count = 0;
srand(time(NULL));
while ( 1 )
{
int r = rand()%15 + 1;
if (++a[r] > 1)
continue;
else
{
printf("%02d ", r);
if (count++ > 15)
break;
}
}
return 0;
}
運行結果:07 08 06 14 11 13 01 04 09 02 10 05 12 03
『叄』 c語言裡面用rand()函數產生無重復的0-15的隨機數
鍵盤輸入不同數字,得不同的0-15無重復
隨機數
#include
#include
main()
{
int
seed=1000;
//
種子
int
i;
int
m[16]
;
int
nn=0;
double
r;
printf("enter
seed
please\n");
scanf("%d",&seed);
srand(seed);
//
初始化隨機數生成器
for
(i=0;i<=15;i++)
m[i]
=
0;
while
(nn
<
10
){
//
r
是雙精度浮點隨機數,范圍0.0到1.0
r
=
(
(double)rand()
/
((double)(RAND_MAX)+(double)(1))
);
i
=(int)
(
r
*
15.0);
if
(m[i]
==
0)
{
m[i]
=
1;
nn
=
nn
+
1;
printf("%d
",i);
};
}
}
『肆』 c語言用隨機函數產生15個100以內的隨機整數
定義個數組
srand((unsigned)time(NULL));
for(i=0;i<15;i++)
a[i]=rand()%100;
然後輸出數組。
完成~!
『伍』 C語言怎麼樣產生隨機數,比如從15到135之間的整數啊,最好旁邊有講解,這塊我們沒有學
#include <stdlib.h>
#include <stdio.h>
#include <time.h> //先要加入 time 頭文件 隨機數根據計算機內部時間來獲取
隨機數
void main( void )
{int i;
srand( (unsigned)time( NULL ) ); //獲取隨機數
k=rand()%131+5; //因為是5-135 所以隨機數要模131個 即取0-130之內的
數然後 +5就是 5-135了 rand()是個隨機值
printf(
『陸』 51單片機用c語言怎麼讓i得到一個0-15的隨機數
啟動計數器0,將TL0的值%16即可得到!
static unsigned char random=5; //再次運行時值已改變。
char i;
TMOD= 0x20;
TR0 =1;
for(i=0;i<random; i++)
;//運行一段時間
ramdom *= TH0;
random %=16;
『柒』 C語言怎樣產生一定范圍的隨機數
在C語言中,rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,可以稱它為種子。
為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數。
C語言產生一定范圍的隨機數的源代碼如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i;
for(i=0; i<10; i++) //隨機產生10個數。
{
printf("%d ", rand());
}
return 0;
}
(7)c語言如何獲得15個隨機數擴展閱讀
1、如果要隨機生成一個在一定范圍的數,你可以在宏定義中定義一個random(int number)函數,然後在main()裡面直接調用random()函數。
2、在對rand()的前三次調用中,並且此後得到的返回值仍然是在對rand()的第一批調用中所得到的其餘的返回值。因此,只有再次給srand()提供一個隨機的「種子」值,才能再次得到一個隨機數。
『捌』 怎麼用C語言生成隨機數
假設要生成的隨機數是大於等於20且小於等於100的整數
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
voidmain(){inta,b,x;
a=20;b=100;
srand((unsignedint)time(NULL));//用當前時間生成一個隨機數種子
x=rand()%(b-a+1)+a;
printf("得到一個隨機數:%d ",x);
}
『玖』 C語言中獲得隨機數的方法是什麼
可以使用庫函數rand()。
rand聲明於stdlib.h,其原型為
int rand(void);
功能為返回一個隨機整型值。在C語言中,該值是一個正數值。
在需要限定獲取到的隨機數范圍時,如范圍要求為[m,n] m<n且m,n均為整數,可以用
rand()%(n-m+1)+m
的形式進行獲取。原理為:
%為取余計算,當%k時,結果是[0,k-1]之間的數值;
於是rand()%(n-m+1) ∈ [0, n-m];
所以rand()%(n-m+1)+m ∈ [0+m, n-m+m]=[m,n]。