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產生隨機數 不重複,C 產生隨機數 不重複
private const int num 3 數目 private const int maxvalue 5 最大數 private const int minvalue 1 最小數 public int sort int num return num public int getnum int ...
用excel生成1萬個不重複的隨機數
201401 5位數 10.5位數生成 1 99999 隨機數序號 結果 10.66923718 20.666948210 30.276677312 40.35952843 50.486855511 60.34990666 70.77859974 80.02875585 90.88373492 第一...
c怎樣生成隨機數C怎樣生成隨機數
random類預設的無參構造來 函式可自以根據當前系統時鐘為種子,進行一系列演算法得出要求範圍內的偽隨機數。random rd new random rd.next 1,10 生成1 10之間的隨機數,不包括10 guid 類 guid globally unique identifier 全球唯一...