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));
}
注意:
答案 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()或其他东西来生成更广泛的随机数。