[英]generating pairs of random numbers in java such that p !=q
我試圖在[0,n)
范圍內創建成對的隨機整數。 我需要確保對於任何輸入n
,創建的數字,比如p,q,使得p != q
我嘗試使用java.util.Random
和seed
sothat我可以重現結果..我嘗試輸入100,200,400,800
並且他們都創建了p,q使得p !=q
。但是在1600兩對與p == q
public static void generate(int size){
Random ran = new Random();
ran.setSeed(123456L);
for(int i =0;i<size;i++){
int p = ran.nextInt(size);
int q = ran.nextInt(size);
if(p==q)
System.out.println(p+" equals "+q);
//else
//System.out.println(p+" "+q);
}
}
public static void main(String[] args) {
generate(1600);
}
這給了
692 equals 692
843 equals 843
我確信有一些方法可以確保p!= q對於任何輸入n ..但我不記得所需的數學
有人可以幫忙嗎?
只要繼續挑選,直到它們不匹配。
int p = ran.nextInt(size);
int q;
do {
q = ran.nextInt(size);
} while(p==q);
在[0,n)中生成一個數字,在[0,n-1]中生成另一個數字如果第二個數字優於(包括)第一個,則添加一個。
int p = ran.nextInt(size);
int q = ran.nextInt(size-1);
if (q>=p){
q++;
}
在List
添加1 to n
。 然后使用Collection.Shuffle來整理整個list
。 它會以相同的可能性洗牌。 然后從列表中獲取任何2
例如
ArrayList a = new ArrayList();
for(int i = 1;i <= n; i++)
a.add(i);
Collections.shuffle(a);
int first = (int)a.get(0);
int second = (int)a.get(1);
其中一個解決方案是:
幾乎100%的步驟2將執行不超過兩次。
但是確保n大於1,因為在另一種情況下你會有無限循環(但無論如何,你不能用任何算法得到正確的結果)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.