由买买提看人间百态

topics

全部话题 - 话题: randnum
(共0页)
r****o
发帖数: 1950
1
明白了,
那这样行吗?
用b-a的二进制形式,比如说是12=1100,共4位。
那么运行random(0,1)4次,每次相当于二进制的一位,如果凑成的二进制数小于等于
1100,则返回randNum+b-a,否则重来。
int diffSize=0;
int diff=b-a;
while(!diff)
{
diffSize++;
diff>>=1;
}
int randNum=MAX_INT;
while(randNum>b-a)
{
randNum=0;
for (int i=0; i {
randNum+=random(0,1)< }
}
return randNum+b-a;

learn
learn
w********p
发帖数: 948
2
来自主题: JobHunting版 - 用rand5()产生rand7()
谢谢yishan, thrust, rainbowrain 的帮忙解释。
这样可以吗? 假设rand5() 产生1,到 5, 用 rand5() 实现 rand7() 产生 1到7。
(和楼主的题,有点点不一样)
rand7() 用三个rand5(), 每个rand5()产生一个bit. 每个rand5() 遇到5的时候
drop,这样可以吗?
public int rand7() {
int randNum = 0;
int returnNum = 0;
for ( int i=0; i<3; i++) {
while ( (randNum = rand5()) == 5 ) {
}
int bit = randNum % 2;
returnNum += (bit< }
return returnNum;
}
这个最后是产生了0-7,还是不符合需要,不过可以过滤掉不想要的0。
这个和最佳答案比,思路还是差很多。
p****r
发帖数: 9164
3
来自主题: TexasHoldem版 - ZT-- The Truth about Full Tilt Poker
for(int i=0;i<52;i++)
{

int randnum = rand() % (52);

int temp=Index[i];
Index[i]=Index[randnum];
Index[randnum]=temp;
}
You think FTP 's shuffle is like this?
(共0页)