當前位置:編程學習大全網 - 編程語言 - 壹個取隨機數的問題!從1,2,3,4中抽取數字!用什麽編程語言無所謂!

壹個取隨機數的問題!從1,2,3,4中抽取數字!用什麽編程語言無所謂!

不知道妳做這個是在什麽地方用,其實做到非常的簡單.但是講起來比較麻煩,還需要妳有壹定的基礎,妳需要耐心的看下去.

C語言的隨機數產生可以通過random函數得到,設x=random() 那麽x就是壹個(0,1)的隨機變量。

再設壹個變量 p4 表示 4 出現的概率

初始化時可以令 p4=1/4

程序結構大致如此

a[]為結果序列

for (循環體根據妳需要的數的長度得到)

{

x=random();//得到壹個隨機數

若 0<x<p4 a[i]=4;

若 p4<x<p4+(1-p4)/3; a[i]=3;

若 p4+(1-p4)/3<x<p4+2*(1-p4)/3; a[i]=2;

若 p4+2*(1-p4)/3<x<p4+3*(1-p4)/3; a[i]=1;

if (a[i]=4) { p4=0;count=0;}

count=count+1;

if (count>16) { p4=(count-16)/4 } 保證16-20次必有壹個 4 出現,同時在16次以內決不會出現兩個4

}

如果妳需要matlab程序我可以很快給妳寫出來。

2 如果妳學過m序列就知道了,計算機的隨機數都是m序列的原理,好比均勻分布的隨機序列,如樓主所說,不加處理(1,2,3,4)出現的概率都是1/4,因此連續出現壹個數的概率N次的概率為(1/4)^N,只要N不管多大,都是可能的,但是概率會非常的小。

3 妳說的第三點是對的,其實計算機的隨機都是偽隨機序列,但是周期可以長到妳這輩子都不可能看完它循環完壹次。

/* HELLO.C -- Hello, world */

#include "stdio.h"

#include "conio.h"

# include "dos.h"

main()

{

int N,i,a[100],count;

float p4,x,dp;

struct time stime;

unsigned seed;

gettime(&stime);

seed=stime.ti_hund*stime.ti_min*stime.ti_hour;

srand(seed);

N=100;

p4=0.25;

count=17;

for(i=0;i<N;i++)

{

x=rand();

x=x/32768;

dp=(1-p4)/3;

if (x>=0 && x<=p4) a[i]=4;

if (x>p4 && x<=p4+dp) a[i]=3;

if (x>p4+dp && x<=p4+2*dp) a[i]=2;

if (x>p4+2*dp && x<=p4+3*dp) a[i]=1;

if (a[i]==4){p4=0;count=0;}

count=count+1;

if( count>16) {p4=(count-16); p4=p4/4;}

printf("%d ",a[i]);

}

getch();

}

srand(seed);根據系統時間初始化隨機,不然就會出現每次運行出相同的結果

上面是根據思路設計的C程序,結果可以調出來,

程序的運行結果生成壹百個隨機數,是 16 個間隔以內肯定只有壹個4,20個間隔以內又必有兩個4

  • 上一篇:飛行實例編程
  • 下一篇:學Java需要註意什麽?
  • copyright 2024編程學習大全網