c一道方法題,n個數隨機排列,有多少中可能

2021-03-04 08:53:54 字數 3111 閱讀 2926

1樓:為君湯湯

數字不出現重複的話,且n大於1是

可能數是n*(n-1)

c# 有一組數,每個數出現的概率不同,如何從這組數中隨機抽出幾個數,怎麼實現? 15

2樓:匿名使用者

static void main(string args)

////// 獲取若干個不同隨機數字

////// 數字與出現概率的配置

/// 獲取數字個數

///static listgetrandnumlist(dictionarysetting, int num)

return ret;

}///

/// 獲取單個隨機數字

////// 數字與出現概率的配置

///static int getrandnum(dictionarysetting)

random rand = new random();

double r = rand.nextdouble() * total;   //取乙個隨機數,乘以總概率值,對映到總概率值的區間內

total = 0;

foreach (int key in setting.keys)

}return setting.keys.last();    //返回最後乙個數,對應rand.nextdouble()隨機到1.0的情況}

c# 有一組數,每個數出現的概率不同,如何從這組數中隨機抽出幾個數,怎麼實現? 30

3樓:匿名使用者

1、按機率生成乙個 int[100]的陣列,陣列裡1有1個,2有4個,3有5個,4有10個。。。按你的機率類推。

2、用random類生成0到99的數來取陣列的值。

3、如有生成重複的就放棄重來。

c#中怎麼將一堆數字中,隨機出乙個 50

4樓:兄弟連教育北京總校

.***.frameword中提供了乙個專門產生隨機數的類system.random,此類預設情況下已被匯入,程式設計過

程中可以直接使用。我們知道,計算機並不能產生完全隨機的數字,它生成的數字被稱為偽隨機數,它是以相同的概率從一組有限的數字中選取的,所選的數字並不具有完全的隨機性,但就實用而言,其隨機程度已經足夠了。

可以用以下兩種方法初始化乙個隨機數發生器;

函式是這樣用,比如100至999的隨機數

random ran=new random();

int randkey=ran.next(100,999);

不過這樣會有重複,可以給random乙個系統時間做為引數,以此產生隨機數,就不會重複了

第一種方法不指定隨機種子,系統自動選取當前時前作隨機種子:

random ra=new random();

第二種方法是指定乙個int型的引數作為隨機種子:

int iseed=6;

random ra=new random(iseed);

下面我們要用到random.next()方法產生隨機數。

ra.next();

它返回乙個大於或等於零而小於2,147,483,647的數,這並不滿足我們的需要,下面我們介紹它的過載函式和其它一些方法。

public virtual int next(int);

用法:ra.next(20)

返回乙個小於所指定最大值(此處為20)的正隨機數。

public virtual int next(int minvalue, int maxvalue);

用法:ra.next(1,20)

返回乙個指定範圍內(此處為1-20之間)的隨機數,我們在下面的例項中會用到此函式。

類system.random還有幾個方法分別是:

公共方法:

nextbytes用隨機數填充指定位元組陣列的元素。

nextdouble返回乙個介於 0.0 和 1.0 之間的隨機數。

受保護的方法:

sample返回乙個介於 0.0 和 1.0 之間的隨機數,只允許子類物件訪問。

以上介紹了隨機數的基本用法,下面我們用乙個例項來做更進一步的介紹。要在一段數字區間內隨機生成若干個互不相同的隨機數,比如在從1到20間隨機生成6個互不相同的整數。

主要是下面兩個函式getrandomnum與getnum:

public int getrandomnum(int num,int minvalue,int maxvalue)

return arrnum;

}getrandomnum即是在區間[minvalue,maxvalue]取出num個互不相同的隨機數,返回的陣列包含著結果。

其中隨機數是這樣建立的 random ra=new random(unchecked((int)datetime.now.ticks));為什麼不用random ra=new random();(系統自動選取當前時前作隨機種子)

用系統時間做隨機種子並不保險,如果應用程式在乙個較快的計算機上執行,則該計算機的系統時鐘可能沒有時間在此建構函式的呼叫之間進行更改,random 的不同例項的種子值可能相同。這種情況下,我們就需要另外的演算法來保證產生的數字的隨機性。所以為了保證產生的隨機數足夠"隨機",我們不得不使用複雜一點的方法來獲得隨機種子。

在上面的這段程式中,我們首先使用系統時間作為隨機種子,然後將上一次產生的隨機數跟迴圈變數和乙個與系統時間有關的整型引數相乘,以之作為隨機種子,從而得到了每次都不同的隨機種子,保證了產生足夠"隨機"的隨機數。

函式getnum是一遞迴,用它來檢測生成的隨機數是否有重複,如果取出來的數字和已取得的數字有重複就重新隨機獲取。值得注意的是要用一同乙個隨機數例項生成,所以ra要作為引數傳入getnum中,否則生成的數字會有重複。

public int getnum(int arrnum,int tmp,int minvalue,int maxvalue,random ra)

n ;}

return tmp;

}最後就是要顯示出來,當點選乙個button時取出的數字顯示在乙個label中。

private void button1_click(object sender, system.eventargs e)

label1.text=temp; //顯示在label1中}

c語言一道題,C語言一道題

程式 如下 include int main printf n printf 總和為 d n sum return 0 include void main 教材上面應該有這個啊 include long fun int a,int n int j long s 0,t 0 for j 0 j n j...

一道C語言的題,一道c語言題

其實他是有不同的,就是?後面應該是表示式,而不是可執行語句,是有返回值的,他適用於給同乙個變數賦不同的值,如果你的那個程式是這樣的。x f x1 f x 0 x1 x2 那麼這個程式就是可以的,但是你這個?後面的 裡面卻是賦值語句,所以產生了錯誤!你這個是給不同的變數賦相同的值 你看我這麼說對嗎?你...

一道c語言程式設計題,一道C語言程式設計題。

include delete all n in array a void fun int a,int n,int odd,int even int main void int odd,even fun a,6,odd,even printf d d n odd,even return 0 void ...