5
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() 之外的任何其他随机生成器函数。
4

3 回答 3

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();
   }

 }
于 2012-06-05T03:23:34.257 回答
2

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

查看模数运算符 %

于 2012-06-05T01:36:40.350 回答
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() 或其他东西来生成更广泛的随机数。

于 2012-06-05T02:05:13.997 回答