如何从给定的随机生成器创建唯一的随机数

时间:2012-06-05 01:31:41

标签: java random numbers unique

Write an efficient algorithm to print the following two outputs
  

您将获得一个名为getrand100()的预定义函数,该函数将返回   一个整数,它是1-100的一个随机数。你可以这个叫   尽可能多地运行,但要注意这个功能   资源密集。您不能使用任何其他随机生成器。   您无法更改getrand100()的定义。

int getrand100(){
    Random rand = new Random();
return (1+rand.nextInt(100));      
}
  • 输出1:以随机顺序打印数字1-20。 (不是20个随机数)
  • 输出2:以随机顺序打印1-200。 (不是200个随机数)

注意:

  • 我。每个号码应该只打印一次。
  • II。数字列表中应该没有模式。列表应该是完全随机的 即,所有数字都有相同的概率出现在任何地方。
  • III。您可以在任意时间调用getrand100()来获取随机数 从1到100.
  • IV。您不能使用任何其他随机生成器 功能除了getrand100()。

3 个答案:

答案 0 :(得分:3)

我们的想法是使用随机生成器来计算所需的随机数。

1)对于随机数1-20,只需将100个数字相等地分成1到20。

2)要生成1-200,请找到1到200之间的偶数,然后添加(-1或0)以获得从1到200的所有数字。

import java.util.*;
public class Rand20_200{
   int number20[]=new int[20]; //numbers in random order
   int number200[]=new int[200];

   public Rand20_200(){
    int n=0;
    int ngen[]=new int[20]; //to store which random numbers are generated
    while(n<20){
      int rnd=1 + (getrand100()-1) / 5;
      if (ngen[rnd-1]==0){
        ngen[rnd-1]=1;
        number20[n++]=rnd;
      }
    }
    System.out.println("Random 20 numbers");
    print(number20);

    ngen=new int[200]; //to store which random numbers are generated
    int numoff[]={-1,0}; //offset to add
    n=0;
    while(n<200){
      int rnd=numoff[(getrand100()-1)/50]+ (getrand100()*2);
      if (ngen[rnd-1]==0){
     ngen[rnd-1]=1;
     number200[n++]=rnd;
      }
    }   
    System.out.println("\nRandom 200 numbers");
    print(number200);
   }

   int getrand100(){
    Random rand = new Random();
    return (1+rand.nextInt(100));      
   }

   void print(int arr[]){
     for(int i=0;i<arr.length;i++){
       System.out.print(arr[i]+" ");
     }
   }

   public static void main(String args[]){
     new Rand20_200();
   }

 }

答案 1 :(得分:2)

假设这是作业,我会保持答案简洁。 :)

查看modulus运算符%

答案 2 :(得分:0)

您可以使用您的值(1 - 20,1 - 200)和随机数创建一个列表,然后对随机数字列表进行排序。

public class RandomListItem
{
    int value;
    int sortindex;

    public RandomListItem(x,y)
    {
        value = x;
        sortindex = y;
    }
}

for(int i = 1; i <= maxvalue; i++)
{
    list.add(new RandomListItem(i, getrand100());
}

对于200列表来说这可能不太好,因为你只能生成最多100个随机数。可能想使用getrand100()* getrand100()或其他东西来生成更广泛的随机数。