導航:首頁 > 源碼編譯 > 獲取k個不重復隨機數經典演算法

獲取k個不重復隨機數經典演算法

發布時間:2022-11-03 08:48:25

『壹』 java 生成k個50~100之間的隨機整數

實現思路:生成50-100之間的隨機數(包括50,包含100),之後循環k次分別輸出即可:

intk=5;

for(inti=0;i<k;i++){

Randomrand=newRandom();

intrandNum=rand.nextInt(50)+50;

System.out.println(randNum);

}

實現思路:獲取到最大數減去最小數的值作為隨機生成的數,之後得到的值加上最小數,就是所需要的數值。

『貳』 如何生成一定范圍內不重復的隨機數

我不知道你什麼語言我提供一個思路吧!
用戶名+時間(毫微秒)+永無重復的隨機數組
此套演算法適合文件上傳時用於解決文件名重復問題
理解:
用戶名:確保用戶名不重復,以此限制重復的可能性僅僅出現在某個具體用戶的操作中!
毫微秒(Ticks):此數重復的可能性極低。
隨機數組:方法是,確認要上傳幾個文件並記錄數量,然後循環出一個隨機數組,判斷:若當前隨機出的數字包含在數組中則循環次數+1(也就是當前循環變數-1)回跳一次循環,以此循環出與文件數相等的隨機數組;此處再一次保證具體某一個用戶在單次多文件上傳時不會出現文件同名情況。
若功能符合上述條件,則可以做到永無重復的文件名!
隨機數組代碼:
int[] intNum = new int[FileCollect.Count];
for (int i = 0; i < FileCollect.Count;i++ )
{
Random dom = new Random();
int domNum = dom.Next(0, 20000);
if (intNum.Contains(domNum)&&i!=0)
{
i = i - 1;
}
else
{
intNum[i] = domNum;
}
}

『叄』 delphi中random取不重復的隨機數。

1、前面0的問題是因為(假定你現在輸入的是5,即num為5),數組長度為5,但是隨機數取值是random(5+1),也就是隨機數值是從0-5一共6個數,那自然有一個取不到。
2、改成random(num)的時候,for k:=0 to i do個人感覺應該是for k:=0 to i-1 do
3、隨機數演算法有很多簡單的方法,比goto什麼簡單的多,比如最常見的偽演算法
a.創建數組x[n],並對每個元素賦值(比如說隨機數在0-n之間),那就x[0]=0、x[1]=1至x[n]=n;
b.從x[0]開始至x[n],將元素隨機與x[0-n]之間的任意一個數字交換
如果是delphi2010以上,也有TDictionary這類東西

『肆』 C#如何生成隨機不重復的數字

private string RndomStr(int codeLength)
{
//組成字元串的字元集合 0-9數字、大小寫字母
string chars = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] charArray = chars.Split(new Char[] { ',' });
string code = "";
int temp = -1;//記錄上次隨機數值,盡量避避免生產幾個一樣的隨機數
Random rand = new Random();
//採用一個簡單的演算法以保證生成隨機數的不同
for (int i = 1; i < codeLength + 1; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));//初始化隨機類
}
int t = rand.Next(61);
if (temp == t)
{
return RndomStr(codeLength);//如果獲取的隨機數重復,則遞歸調用
}
temp = t;//把本次產生的隨機數記錄起來
code += charArray[t];//隨機數的位數加一
}
return code;
}
//生成隨機數字方法
public class RandomHelper
{
/// <summary>
///生成制定位數的隨機碼(數字)
/// </summary>
/// <param name="length"></param>
/// <returns></returns>
public static string GenerateRandomCode(int length)
{
var result = new StringBuilder();
for (var i = 0; i < length; i++)
{
var r = new Random(Guid.NewGuid().GetHashCode());
result.Append(r.Next(0, 10));
}
return result.ToString();
}
}

『伍』 用EXCEL隨機抽取並且不重復。

方法一:公式法

1、我們以生成1-10范圍內的隨機數字為例,講述方法。

首先,在A2單元格中輸入公式:=SMALL(IF(COUNTIF($A$1:A1,ROW($1:$11))=0,ROW($1:$11)),INT(RAND()*(11-ROW(A1))+1))

然後按下Ctrl+Shift+Enter三鍵結束數組公式。

『陸』 求一個特定區域內產生隨機數不重復的演算法。

解答如下:

像這種題目就是求全排列的類型。
現在你題目中有y個數字,
第一次抽取時,共有y個數字可供選擇,因此有y種可能性。

第二次抽取時,因不能重復,所以共有y-1個數字可供選擇,因此有y-1種可能性。

第三次抽取時,也因不能重復,所以只有y-2個數字可供選擇,因此有y-2種可能性。

根據上面可以類推出第四次,第五次……第y次
因此具體的答案就為:y*(y-1)*(y-2)*(y-3)……*{y-(y-1)} = y!

『柒』 在n個元素中隨機挑選k個不重復元素,該怎麼選

import java.util.Random;

public class vder {

public static void main(String[] args) {
int a[]={1,2,3,4,5,6,7,8,9,0};
boolean r[]=new boolean[a.length];

Random random = new Random();

int m = 5; //要隨機取的元素個數

if(m > a.length || m < 0)
return;

int n = 0;
while(true)
{
int temp = random.nextInt(10);

if(!r[temp])
{
if(n == m) //取到足量隨機數後退出循環
break;

n ++;
System.out.println("得到的第" + n +"個隨機數為:" + temp);
r[temp ] = true;
}
}

}
}

『捌』 如何產生100個不重復的隨機數

可以考慮先把這100個數放在一個數組內,每次隨機取一個位置(第一次是1-100,第二次是1-99,...),將該位置的數與最後一個位置的數對調就可以了。

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int [] arr=new int[101];
int i;
//初始化數組
for(i=1;i<=100;i++)
{
arr[i] = i;
}
//隨機數
Random r = new Random();
for (int j = 100; j >= 1; j--)
{
int address = r.Next(1,j);
int tmp = arr[address];
arr[address] = arr[j];
arr[j] = tmp;
}
//輸出
foreach (int k in arr)
{
Console.Write(k+" ");
}
}
}
}

『玖』 看到一個excel生成不重復隨機數的很牛的公式。請高手替我詳細解釋一下下面的這個公式

按照公式原理一步一步說明:
ROW($1:$100)是生成了一個1到100的數組
INDIRECT("R[-"&ROW()-(ROW()>1)&"]c:r[-1]c",0)是第一行至前一行的引用,如公式在第8行,那麼這個公式的結果就是引用第1行至第7行,如公式在第1行,則結果為0。
COUNTIF的作用是計算1到100這個數組的元素在前幾行有那些元素出現,生成了一個100個元素的一維數組,類似0,0,0,0,1,0,0,1......,總共100位,其中第5個數為1,代表5在前幾行已經出現,第8個數為1,代表8在前幾行已經出現.
countif在乘以101,再加上ROW($1:$100),結果是一個數組,結果為1,2,3,4,106,6,7,109。。。(前幾行出現的數都會大於等於102,如5、8)。這是small函數的第一個參數:數組。
INT(RAND()*(101-ROW(A1)))+1,生成一個隨機數,此隨機數與行數有關,行為1,則隨機數范圍為1到101-1,行為2,則隨機數范圍為1到101-2。這是small函數的第二個參數:k。
small函數的作用是取一個數組中第k個最小的數,如果公式在第45行,那個第一個參數里有44個數大於等於102,剩餘56個數小於等於100且小於那44個已經出現的數,第二個參數為1到56(即101減去45)的隨機數k,相當於從剩餘56個最小的數中取第k個最小的數,既實現了隨機性,又滿足1到100的整數,且不與前邊重復。
同理,1到100行的數均是按照上述原理實現的。

『拾』 C語言如何產生不重復的隨機數

用一個數組裝隨機數,一個數組表示已經記錄過的隨機數;

比如說隨機0-8,生成一個隨機8位數組且數組內各項不重復;

例:

intarray[8];

intarrayIndex[8]={0,0,0,0,0,0,0,0};

intk=0;

srand(100);

while(k<8){

intq=rand()%8+1;

if(arrayIndex[q-1]==1){

continue;

}

array[k]=q;

arrayIndex[q-1]=1;

k++;

}

(10)獲取k個不重復隨機數經典演算法擴展閱讀

C語言隨機輸出1~20不重復的隨機數

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

voidmain()

{

inta[20];

inti,j;

srand((int)time(0));

a[0]=rand()%20+1;

for(i=1;i<20;i++)

{

a[i]=rand()%20+1;

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

{

if(a[i]==a[j])

{

i--;

}

}

}

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

{

printf("%3dn",a[i]);

}

}

閱讀全文

與獲取k個不重復隨機數經典演算法相關的資料

熱點內容
erp是什麼伺服器 瀏覽:184
python中tmp 瀏覽:21
說明wpf加密過程 瀏覽:142
java讀取list 瀏覽:702
iis7gzip壓縮 瀏覽:39
有什麼安卓機打吃雞好 瀏覽:597
三星u盤加密狗 瀏覽:473
php函數的返回值嗎 瀏覽:586
國企穩定程序員 瀏覽:328
編程貓如何使用教程視頻 瀏覽:218
安卓遠端網頁如何打日誌 瀏覽:218
壓縮flash大小 瀏覽:993
解壓的玩具教程可愛版 瀏覽:366
哪個求職app比較靠譜 瀏覽:888
java的讀法 瀏覽:61
nod32區域網伺服器地址 瀏覽:1003
數碼科技解壓 瀏覽:236
新網的雲伺服器管理界面復雜嗎 瀏覽:367
無人聲解壓強迫症視頻 瀏覽:573
計算機編譯運行 瀏覽:640