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

San*_*rma 5 java random numbers unique

Write an efficient algorithm to print the following two outputs
Run Code Online (Sandbox Code Playgroud)

您将获得一个名为getrand100()的预定义函数,该函数返回一个整数,该整数是1-100中的一个随机数.您可以根据需要多次调用此函数,但要注意此函数是非常耗费资源的.您不能使用任何其他随机生成器.您无法更改getrand100()的定义.

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

注意:

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

Sub*_*ubs 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();
   }

 }
Run Code Online (Sandbox Code Playgroud)

  • 这不是那种可以帮助OP自己解决**作业**的信息。 (2认同)