1.4.44生日问题。编写一个程序,从命令行接受一个整数N作为参数并使用StdRandom.uniform()生成一系列0至N-1之间的随机整数。通过实验验证产生第一个重复的随机数之前生成的整数数量为~sqrt(pi*N/2)。
答:

public class E1d4d44
{
public static void main(String[] args)
{
for (int i=2;i<=10000000;i=i+i)
{
int[] data=new int[i];
int count=0;
boolean notRepeart=true;
while (notRepeart)
{
int r=StdRandom.uniform(i);
if(data[r]==0)
{
count++;
data[r]=1;
}
else
{
notRepeart=false;
}
}//end while
StdOut.printf("N=%9d count=%7d sqrt(pi*N/2)=%6.1f ",i,count,Math.sqrt(Math.PI*i/2));
}//end for
}//end main
}//end class
答:
public class E1d4d44
{
public static void main(String[] args)
{
for (int i=2;i<=10000000;i=i+i)
{
int[] data=new int[i];
int count=0;
boolean notRepeart=true;
while (notRepeart)
{
int r=StdRandom.uniform(i);
if(data[r]==0)
{
count++;
data[r]=1;
}
else
{
notRepeart=false;
}
}//end while
StdOut.printf("N=%9d count=%7d sqrt(pi*N/2)=%6.1f ",i,count,Math.sqrt(Math.PI*i/2));
}//end for
}//end main
}//end class