题目:设rand(s,t)返回[s,t]之间的随机小数,利用该函数在一个半径为R的圆内找随机n个点,并给出时间复杂度分析。
解析:要在圆内随机选择一个点,那么选择这个点的概率一定是1/πR^2,
应该用两次随机变化:
这个使用数学中的极坐标来解决,先调用[s1,t1]随机产生一个数r,归一化后乘以半径,得到R*(r-s1)/(t1-s1);
然后在调用[s2,t2]随机产生一个数a,归一化后得到角度 2π *(a-s2)/(t2-s2)
题目:
下面的程序可以从1....n中随机输出m个不重复的数
knuth(int n, int m)
{
srand((unsigned int)time(0));
for (int i=0; i<n; i++)
{
if ( )
{
cout<<i<<endl;
;
}
}
}
1、rand()%(n-i) < m
2、m--