1樓:匿名使用者
【解題思路】
這個題目要解決兩個問題:一是產生隨機數;二是不能重複。
●第一個問題:產生隨機數。在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
2樓:匿名使用者
#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的概率
3樓:韻城之都的管家
因為windows下rand函式取值只有32767個,你可以試試rand()*rand(),這樣可以生成32767*32767範圍的數!
4樓:匿名使用者
演算法就是,每生成一個數就與原來生成的數比較,如果有相等的就就重新生成一個數,這樣就能保證10個數都不相等了。下面這個程式生成數的範圍是0到100:
#include
#include
#include
#define max 100
using namespace std;
int main()
}if(!ret)
if(i==10)
}while(--i)}
5樓:匿名使用者
rand_max是32767, 於是rand()/rand_max得到是1/32767~32767/32767, 乘上n依然只有32767個數
可以通過(rand() << 16) | rand(), 即高16位和低16位分別產生隨機數的方法得到更大的隨機數
另外先儲存再取是個空間時間都特低效的辦法, 更好的演算法可以自己搜一下"c++產生不重複隨機數"
6樓:匿名使用者
用rand()函式,你先網上看看rand()是怎麼用的,注意它是偽隨機,初始化種子要設好,網上查下資料多想下就知道了。接著是,你要不同的10個數。你可以設個陣列儲存已經產生的數。
比如已經產生了第一個數5,你用rand()生成了又一個5時,比較一下以產生的數發現是5,就跳過,看下一個。總能產生10個不同的隨機數。 缺點是rand()不夠好,而且演算法不夠優化,但是能滿足你的要求,就10個數,不影響效率。
如果你要上萬個不一樣的就要好好優化演算法了。
7樓:匿名使用者
#include
#include
#include
#define max 100
using namespace std;
int main()
}if(!ret)
if(i==10)
}while(--i)
} 不應該用int定義main函式 沒有整形的返回值,並且j沒有初始化
C生成1 20隨機數不重複,C 如何生成不重複的1 100隨機數。
public void generaterandomnums value rand.next 1,21 if list.contains value foreach int temp in list temp c 如何生成不重複的1 100隨機數。有兩種思路 1 隨機生成一個1 100的數,然後判斷...
在Flash中產生隨機數
random函式在flash裡是非常有用的,可以生成基本的隨機數,建立隨機的移動,以及隨機的顏色和其他更多的作用。在下面這個例子中當你每次按下按鈕就會顯示一個從 100到100的隨機數,這個教程將解釋如何做出這個例子以及如何利用random函式產生其他不同的結果。基本的random函式如下 math...
如何用c 產生隨機數,如何用C 產生隨機數?
在煙幹辰 rand 這個函式就是產生隨機數的,想要一個範圍的隨機數,可以用取餘數的方式 如取0 99之間的數,可以rand 100 需要使用rand 和srand 函式 rand 為隨機數函式,產生 0,int型最大值 之間的整數數 srand seed 為初始化隨機數種子函式 具體例子如下 inc...