(1)rand7能生成1-7的整数随机数。要求利用rand7生成1-10的整数随机数。
答案:一次rand7运算只能生成7个整数,没有办法均匀的映射到10个整数上。但是运行两次rand7可以生成49个数字,如果这49个数字是均匀分布的,舍去多余的9个,剩下的40个正好可以用模10运算映射到10个整数上。
代码如下:
int rand10(){
int i;
do{
i = 7*(rand7()-1)+rand7();
}while(i>40)
return i%10+1;
}
(2)如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串)
思路&