int getnum50()
{
Random rand = new Random();
return (1+rand.nextInt(50));
}
getnum50()
1 から 50 までの 1 つの乱数である整数を返すという名前の定義済み関数が与えられます。- この関数は何度でも呼び出すことができますが、この関数はリソースを大量に消費することに注意してください。
- 他の乱数発生器は使用できません。の定義を変更することはできません
getnum50()
。
1 から 100 までの数字をランダムに出力します。(100個の乱数ではありません)
ノート:
- 私。すべての数値は、正確に 1 回出力する必要があります。
- ii. 数字のリストにパターンがあってはなりません。リストは完全にランダムである必要があります。つまり、すべての数字はどの場所にも同じ確率で表示されます。
- iii. 1 から 50 までの乱数を取得するために getnum50() を何度でも呼び出すことができますが、コードを最適化するようにしてください。
- iv。getnum50() 以外の乱数生成関数は使用できません。
正しい出力を示すコードをいくつか書きました。
import java.util.Random;
public class RandomInteger{
int number[]=new int[100];//To store numbers in random order
public RandomInteger(){
int n[]=new int[100];//array to store which random numbers are generated
int off[]={-1,0};//offset to add
System.out.println("Length of array number100 is:"+number.length);
System.out.println("Generating random numbers in the range 1-100:");
for(int n1=0;n1<number.length;n1++){
int rnd=off[(getnum50()-1)/50]+(getnum50()*2);
if(n[rnd-1] == 0){
n[rnd-1]=1;//to indicate which random number is generated
number[n1]=rnd;
System.out.println(number[n1]+" ");
}
}
}
//end of constructor
int getnum50(){
Random rand = new Random();
return (1+rand.nextInt(50));
}
public static void main(String args[]){
RandomInteger m= new RandomInteger();
}
//end of main()
}
//end of class
そのラウンドでは受け入れられましたが、次のラウンドで面接担当者は、それgetnum50()
はコストのかかる方法であり、最良のシナリオでも、生成される数値ごとに 2 回呼び出す必要があると私に言いました。つまり、1 ~ 100 の場合は 200 回です。最悪のシナリオでは、それは無限であり、平均的なケースでは数万です。彼は、平均的なケースを大幅に改善するためにコードを最適化するように私に依頼しました。答えられなかったので、質問に対する適切な答えを教えてください。上記のコードを最適化するにはどうすればよいですか??