//用delphi產生不重複的隨機數
varaa : array[1..36] of string[2];
//aa陣列為需要隨機排列的陣列,
procedure tform1.formcreate(sender:
tobject);
vari:integer;
begin
for i:=1 to 36 do
begin
aa[i]:=inttostr(i);
bb[i]:=inttostr(i);
end;
end;
procedure tform1.button1click(sender: tobject);
vari,j:integer;
swapa:string[2];
begin
randomize; //隨機數初始化*一定要有,不然下次執行時候產生的隨機數仍然和這次相同*
for i:=1 to 36 do
begin
j:=1+random(36);
swapa:=aa[i];
aa[i]:=aa[j];
aa[j]:=swapa;
end;
//由此得到不重複的隨機排列數字
如何產生34-456之間的隨機數
randomize; 34+random(456-34+1);
×××××××××××××××××××//下面是掃雷遊戲的乙個編法
procedure tform1.button1click(sender:tobject); begin randomize; memo1.lines.add(inttostr(random(20))); end;
隨機數相關的幾個函式: 1、randseed;//隨時機數發生的「種子」。如果不賦值那麼每次執行產生的隨機數列是一樣的。 所以該值必須每次呼叫均應是不同值。 2、randomize;//用當前機器時間作為「種子」初始化隨機數發生器。 3、random() ;//由「種子」初始化的隨機數出發,開始產生隨機數序列
但是delphi中的random()產生的是偽隨機數,也就是說,程式的兩次執行,random()產生的隨機數是一樣的。
先執行一下randomize,再random就是真正的隨機數了
即:randomize //初始化隨機數發生器 random()
delphi 如何產生不重複隨機數
pascal裡的隨機數
隨機數是指理論上沒有規律可循、在指定範圍內每個數的出現機率相等、無法根據之前的數來**下乙個數的數列。一般隨機數生成器的基本原理是:首先初始化乙個隨機種子,其初始值可以是任意的整數;在每次獲取隨機數時,以隨機種子為基礎進行某種特殊的運算,獲得乙個隨機數並返回之,然後再對隨機種子進行某種運算,改變隨機種子的值。這樣,就可以生成許多比較隨機的數,但同乙個初始值的隨機種子將會生成完全相同的隨機數列。
pascal的system單元提供了兩個與隨機數有關的子程式:randomize和random。
randomize過程用於初始化隨機種子,其初始值取決於當前的系統時鐘。
random函式用於獲取隨機數
它有兩種呼叫形式:
random,返回乙個0到1之間(不包括1)的隨機實數;
random(n),返回0至n之間(不包括n)的隨機整數,n為word型別整數。
另外,system單元中隨機種子變數的識別符號為randseed,你也可以手動修改它。隨機數在資訊學奧林匹克中可用於隨機化搜尋、窮舉等演算法,以優化其效能,也可用於在快速排序中選擇關鍵數,以使其快速排序演算法的最壞情況沒有固定的相應數列。如果你希望使用了隨機數的程式對同乙個輸入資料能有恆定的輸出結果,可以設定randseed為乙個定值。
乙個**小演算法
比較耗費機時,如果產生的數目少,就不要用這個演算法了。
計算的是在乙個範圍內(如1-1000),隨機抽取n個不相等的隨機數。我的思想就是先定義乙個用來存放的陣列(這當然是必須的啦,廢話),然後定義了乙個二維陣列(感覺很浪費空間),這個二維陣列是用來存放已經生成隨機數的範圍,當然不是隨意存放了,要按照自然順序,但這還不必要定義二維的。二維主要是存放乙個範圍,即某一列的第一行存放的是範圍的小值,而第二行存放的是範圍的大值。這樣新生成的隨機數肯定是在範圍之外的,因為範圍是已生成隨機數的範圍啊。這樣,每次取隨機數時,先隨機抽取在某兩個範圍陣列值之間,再在這兩個範圍陣列值之間取隨機數。基本上就是這樣了。
public class random {
intcount=500; //個數
intmin=1; //最小值
intmax=1000; //最大值
int r=new
int[count]; //隨機數儲存陣列
int k=new
int[2][count+2]; //儲存範圍陣列,用於判斷範圍值
//一維陣列用來存放範圍的小值,二維用來存放大值
intl=0; //儲存空間大小
public
random() //初始化範圍
{k[0][0]=min-1; k[1][0]=min-1;
k[0][2]=max+1;
k[1][2]=max+1;
l=3;
public int
ran(){ //來乙個可以製造隨機整數的東西
return
(int)(math.random()*1000000000);
public void p(int x,int
c) //用來比較儲存陣列
{ for(int
i=0;i
if(x
隨機產生漢字
region 產生n個隨機的漢字 產生n個隨機的漢字 產生的隨機漢字個數 public static string getrandomchinese intstrlength 此函式在漢字編碼範圍內隨機建立含兩個元素的十六進製制位元組陣列,每個位元組陣列代表乙個漢字,並將 四個位元組陣列儲存在obj...
產生隨機數
先說明一下rand,這個函式用來產生偽隨機數。比如,產生1000的兩個隨機數,產生的兩個一般上是不同的,但如果要產生80個100以內的隨機數,僅用rand函式就不夠。因為產生80個100以內的隨機數,至少有兩個數相等的概率太大了 srand函式,並不能使產生的隨機數完全不同。你可以執行以下這串 in...
隨機序列產生演算法
題目 已經提供乙個int rand int n 的隨機數生成函式用來生成 0,n 的隨機數,求編寫演算法生成1至n的隨機序列,要求該序列包含不重複的1 n數字。include include include using namespace std 首先,建立乙個長度為n的陣列array,初始值是0 ...