已知函数rand7()产生1到7的随机数,利用rand7()如何构造出函数rand10(),使得其产生随机数1~10

此系列题目和思路均来自网络(博客等),在这里表示感谢。

题目

已知函数rand7()产生1到7的随机数,利用rand7()如何构造出函数rand10(),使得其产生随机数1~10

下面是算法的C++实现。

#include<cstdlib>
#include<iostream>
using namespace std;

int rand7(){

return rand()%7+1;
 }

int rand10() {

int a = 7*(rand7()-1)+rand7();
while(a >40) {
a= 7*(rand7()-1)+rand7();
}
return a%10+1;
}

int main() {
int a[10];
for(int i=0;i<10;i++)
	a[i] = 0;
for(int i=0;i<10000000;i++) {
	int x = rand10(); 
 a[x-1] = a[x-1] + 1 ;
}
for(int i=0;i<10;i++) {
cout<<i<<": "<<a[i]<<endl;
}
return 0;
}




输出结果


0: 999208
1: 998657
2: 999309
3: 1000988
4: 1001883
5: 999741
6: 1000210
7: 998822
8: 999737
9: 1001445


从输出结果可以看出效果还是不错的。

在此感谢以下本文参考的博客(排名不分先后):
1. http://blog.csdn.net/furturerock/article/details/6850634

2. http://blog.csdn.net/v_july_v/article/details/6803368

你可能感兴趣的:(随机数)