C 中生成10以內互不相同的隨機數

2022-06-29 02:46:21 字數 5967 閱讀 4959

1樓:匿名使用者

按照題目理解為隨機整數,實際上就是0~9按照隨機位置排列到陣列中。

#include

#include

#include

using namespace std;

#define n 10

void main()

{ int a[n],i,j,b;

srand((unsigned int)time(null));

for ( i=0;i{ while ( 1 ){ a[i]=rand()%10;

for ( j=0,b=1;jif ( b ) break;

2樓:匿名使用者

每產生一個隨機數,就和原本生成的隨機數進行比較. 如果不相同,就保留. 否則重新生成.大概寫了個, 你參考下#include< iostream >

#include< ctime >

using namespace std;int main()if( j < i )

a[ i ] = t;

} for( i = 0; i < 5; ++i )return 0;}

如何用c++生成10個不重複的隨機數

3樓:金色潛鳥

#include

#include

#include

using namespace std;

int main()

}for(i=0;i

return 0;}

c++如何產生10個不同的隨機數並輸出到一維陣列中去?

4樓:匿名使用者

#include

#include

#include

using namespace std;

int main(void)

return 0;

}以上**產生10個不同的1-50之間的隨機數。時間不夠,只能寫這個簡單的,實際上還可以封裝成隨機函式,如果隨機數範圍更大,需要自己寫類似rand()的

注:rand()返回0至rand_max之間的隨機數值,rand_max定義在stdlib.h,其值為2147483647,一般情況下足夠了。

如果滿意,歡迎採納,謝謝

如有疑問,歡迎追問

5樓:匿名使用者

題目的關鍵是完全不同的隨機數

樓上的芝麻忽略了這一點

其中,judge是遞迴函式,作用是判斷是否有相同的數字。1是沒有,0是有!

引數含義:a:陣列首地址,len陣列長度:x需要判重的數字#include

#include

#include

using namespace std;

int judge(int *a,int len,int x)int main(void)

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

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

return 0;}

6樓:野文菜

用個rand函式就可以了

#include

#include

using namespace std;

int main()

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

7樓:匿名使用者

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

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

static int a[0]=;

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

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

8樓:檀衛傑

程式如下,望採納!

#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;}

9樓:匿名使用者

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

c++程式設計題目產生10個不同隨機數。

10樓:匿名使用者

每產生一個隨機數,就和原本生成的隨機數進行比較. 如果不相同,就保留. 否則重新生成.大概寫了個, 你參考下#include< iostream >

#include< ctime >

using namespace std;int main()if( j < i )

a[ i ] = t;

} for( i = 0; i < 5; ++i )return 0;}

c++ 產生一組互不相同的隨機數問題

11樓:小狗鄙視貓

是的 產生了55個。while()迴圈中雖然只產生54個下標從1..54 但是你 之前已經賦值了a[0]=rand()%54;

所以 總共產生了 55個 ,while結束不了

12樓:小奧黑莓派

樓主 我不會告訴你 你產生了55個數,導致你的迴圈邏輯出現錯誤。

好吧 我說清楚一點,就是你產生是55個數,產生的方法是rand()%54,那麼,你的第55個數,就必然和前面的一個相同,於是,死迴圈了

13樓:匿名使用者

while(i<55)這個條件錯了, 應該是while(i<54)

具體原因是rand()%54的結果肯定在0-53之間,共54個,一旦陣列a中儲存了54個元素後,後續所有的rand()%54都必定與a中的某個元素相同,所以flag就不是0了,i++也就不會再執行, i也就一直是54一直滿足while條件,一直死迴圈了。

更直接的說,i實際就是目前有效的隨機數個數,所以一旦達到54就應該退出迴圈,所以應該是i<54

14樓:來阿里飛

模54只能產生54個不同的隨機數

而while迴圈的判定條件是:i<55

要求55個不同的隨機數,這是不可能的,所以程式一直停留在這個迴圈中,沒有輸出結果

把判定條件改成 i<54 就行了

另外main函式的返回值應該是 int 型別吧

c++中產生不重複的隨機數

15樓:匿名使用者

【解題思路】

這個題目要解決兩個問題:一是產生隨機數;二是不能重複。

●第一個問題:產生隨機數。在c++中要產生隨機數必須用到兩個函式:

srand()和rand()函式,使用這兩個函式必須包含標頭檔案 。其中rand()是產生一個偽隨機數,比如:int a=rand();函式返回值的取值範圍是int型別的取值範圍,如果要取得某個範圍的隨機數,可以通過取餘來實現,比如需要小於100的隨機數可以這麼寫:

int a=rand()%100;需要100-199之間的隨機數可以這麼寫:int a=100+rand()%100。但在使用這個函式之前,還必須通過srand()函式來指定一個隨機種子,如果沒有指定隨機種子,程式每次執行產生的隨機數系列和順序是相同的。

而且srand()指定了隨機種子之後,可以多次使用rand()函式來產生隨機數,而不必每次使用rand()都指定種子。為了確保程式每次執行時的隨機種子都不一樣,最好的辦法是使用系統時間作為隨機種子,比如:srand((int)time(null));

●第二個問題:不重複。這個問題系統沒有提供現成的函式,只能由程式設計者使用程式來實現。

實現的方法就是把每一個得到的隨機數儲存起來,然後當有新的隨機數產生的時候一個個比較,如果出現重複就重新產生隨機數。

像本題要求隨機輸出1-10十個不同的隨機數,就是既要限定範圍,又要不能重複,程式段如下:

【程式**】

#include //控制檯操作標頭檔案

#include //隨機函式標頭檔案

int main()                            //主函式

//顯示隨機數

printf("\n\n");                      //換行

/*上面**第一次產生10個隨機數,因為沒有設定隨機種子,所以程式每次執行得到的數值都相同*/

srand((int)time(null));              //設定系統時間為隨機種子

printf("第二批十個隨機數(每次執行數值都不同):\n");

for(i=0;i<10;i++)                    //產生並顯示10個隨機數

//顯示隨機數

printf("\n\n");                      //換行

/*上面**第二次產生10個隨機數,因為設定系統時間為隨機種子,所以程式每次執行得到的數值都會不同,隨機種子只需設定一次,下面都不需要再設定*/

printf("第三批十個隨機數(10-29,可能重複):\n");

for(i=0;i<10;i++)                    //產生並顯示10個隨機數

//顯示隨機數

printf("\n\n");                      //換行

/*上面**第三次產生10個隨機數,因為設定了初始值並使用了取餘運算子,可以保證產生的隨機數在指定範圍內,因為沒有是否重複的判斷,多執行幾次,會發現這10個隨機數是可能重複的*/

for(i=0;i<10;i++)                    //產生並顯示10個隨機數

{d[i]=10+rand()%20;                //得到隨機數

for(j=0;j

16樓:匿名使用者

#include

#include

#include

#include

using namespace std;

int main()

;random_shuffle(nums.begin(),nums.end());

copy(nums.begin(),nums.end(),ostream_iterator(cout," "));

cout<

為1/n的概率

17樓:韻城之都的管家

因為windows下rand函式取值只有32767個,你可以試試rand()*rand(),這樣可以生成32767*32767範圍的數!

18樓:匿名使用者

演算法就是,每生成一個數就與原來生成的數比較,如果有相等的就就重新生成一個數,這樣就能保證10個數都不相等了。下面這個程式生成數的範圍是0到100:

#include

#include

#include

#define max 100

using namespace std;

int main()

}if(!ret)

if(i==10)

}while(--i)}

19樓:匿名使用者

rand_max是32767, 於是rand()/rand_max得到是1/32767~32767/32767, 乘上n依然只有32767個數

可以通過(rand() << 16) | rand(), 即高16位和低16位分別產生隨機數的方法得到更大的隨機數

另外先儲存再取是個空間時間都特低效的辦法, 更好的演算法可以自己搜一下"c++產生不重複隨機數"

altium designer中,生成pcb後,選中元件拖動的時候,就看不見元件了,怎麼設定過來?求高人指點

是你元器件做的時候中心偏離了 你試著把幾個器件圈一起再挪動就不會有這個問題 實質性的辦法就是 製作器件的時候把器件放到中心 3 ok 違反規則了,一般都是距離靠得太近了,你檢查下是不是它和其它元件重合呢,拖動下就直到消失,看看是不是有其它元件 我也遇到了類似的 在dxp中有個pcb aditor中有...

初中生成績不好可以考什麼學校,我是初中生,成績不好,不知道畢業之後上什麼學校?

每年中考成績公佈後都是幾家歡喜幾家愁,成績不好的初中生可以選擇什麼學校呢 可以學習什麼專業技能呢?跟小編一起看一下吧。1成績不好初中生的出路 中考成績差的孩子可以上技工學校,技工院校重視勞動技能的培訓,畢業後一般都已經掌握了相應的勞動技能,步入社會可以勝任某種勞動崗位。中考成績不好的孩子可以上 五年...

高中生成績不好不想讀大學了,學什麼技術對以後找工作有幫助喃

現在高中畢業學一門技術確實很不錯的,我覺得吧,現在高中生學一門西點技術或許就很好的,現在西點師愈來愈受歡迎,這一塊的發展前景還是很不錯的,而且在呼市新東方學出來還有中專學歷,出來找工作還是很好找的,你覺得呢?可以考慮去學廚師,現在川菜很熱門,廚師是高新熱門職業,非常好就業。當廚師好處很多,基本不愁就...