#include <stdio.h>
#include <stdib.h>
void main()
{ int i;
unsigned seed;
printf("please input seed:");
scanf("%u",&seed);
srand(seed);
for(i=0;i<10;i++)
printf("%3d",1+rand()%100);
printf("\n");
}
uj5u.com熱心網友回復:
存在不重復的亂數嗎?得先假定范圍吧
uj5u.com熱心網友回復:
用一個亂數或者實時鐘做隨機種子。uj5u.com熱心網友回復:
代碼里已經用srand置了隨機種子,保證隨機種子不同 ,產生的亂數序列就是不同的。但是同一個序列里有數字重復是正常的。uj5u.com熱心網友回復:
樓主要的是不是10次或更多次里面隨機出來的值要全部不一樣的.uj5u.com熱心網友回復:
我之前想的方法是 做一個類似鏈表,100個,每個里面存一個值,然后 生成一個亂數 %100,把對應位置的數取出來,接著從鏈接中刪去,再生成亂數%99....這樣回圈100次.uj5u.com熱心網友回復:
randmize();random(10000)%100;
我一般是這么干的
uj5u.com熱心網友回復:
通常任意產生隨機數容易重複...若要產生不重複隨機數...過程上會有反覆比對的過程而顯得沒效率......所以必須使用有效率的給定範圍洗牌法~
uj5u.com熱心網友回復:
#include <stdlib.h>
#include <stdio.h>
const int NUM_MAX = 100; /* 範圍給定 */
void main()
{
int val[NUM_MAX];
int i, r;
/* 起始設定亂數產生器 */
randomize();
for (i = 0; i < NUM_MAX; i++) val[i] = i + 1; /* 建立一個漸進值數組 */
/* 以洗牌法隨機對換數組裡的值...產生不重複隨機數 */
for (i = 0; i < NUM_MAX; i++) {
r = random(NUM_MAX);
/* 無暫存交換法 */
val[i] += val[r];
val[r] = val[i] - val[r];
val[i] -= val[r];
}
for (i = 0; i < 10; i++) printf("%3d", val[i]);
printf("\n");
system("pause"); /* 請按任意鍵繼續... */
}
uj5u.com熱心網友回復:
#include <stdlib.h>
#include <stdio.h>
const int NUM_MAX = 100; /* 範圍給定 */
void main()
{
int val[NUM_MAX];
int i, r;
unsigned seed;
/* 設定虛擬隨機種子 */
printf("please input seed:");
scanf("%u", &seed);
srand(seed);
for (i = 0; i < NUM_MAX; i++) val[i] = i + 1; /* 建立一個漸進值數組 */
/* 以洗牌法隨機對換數組裡的值...產生不重複隨機數 */
for (i = 0; i < NUM_MAX; i++) {
r = random(NUM_MAX);
/* 無暫存交換法 */
val[i] += val[r];
val[r] = val[i] - val[r];
val[i] -= val[r];
}
for (i = 0; i < 10; i++) printf("%3d", val[i]);
printf("\n");
system("pause"); /* 請按任意鍵繼續... */
}
uj5u.com熱心網友回復:
只能是在某個范圍內不重復吧。uj5u.com熱心網友回復:
或者把一個數字列打亂。uj5u.com熱心網友回復:
只能是在某個范圍內不重復uj5u.com熱心網友回復:
樓主問的問題在現實生活中是非常常見的!典型的是撲克牌的刷洗。這是非常簡單的也是最基本的概率論的問題。先把數學公式寫出來。
uj5u.com熱心網友回復:
int __fastcall Pub_GetRand(float MIN, float MAX) //其中MIN,MAX為你要求的亂數的上下限{
float max;
max=RAND_MAX;
srand( (unsigned)time( NULL ) ); //亂數計時開始
return (int)(rand()*(MAX-MIN)/max+MIN);
}
//-------------------
uj5u.com熱心網友回復:
生成m個小于n不重復的亂數1、首先生成一個值為0到n-1的陣列
2、隨機選擇陣列中一個下標,把該下標的值與第一個元素交換。
3、從第二個元素到最后一個元素繼續隨機選擇下標,與第二個元素交換。
4、一直到m次,陣列前面m個元素就是符合題意的不重復亂數。
uj5u.com熱心網友回復:
頂9樓
uj5u.com熱心網友回復:
先把你的數放到一個List中1.產生亂數范圍是List.Size()-1.
2.每產生一個亂數,就把List中這個數洗掉
重復1,2就可以了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137470.html
標籤:基礎類
下一篇:VC組合的快捷鍵制作
