设计一“真随机数”函数:int MyRandom(int n,int m); 功能:n<m,随机产生n~m之间的整数,要求每次调用返回一随机数,均匀分布在n~m之间,注意程序每次运行,其产生的随机数是不同的。 注: 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而C语言中的随机函数 rand()是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。而本题要求为不可预见的真随机数。
时间: 2024-03-24 08:38:32 浏览: 98
由于本题要求产生真随机数,我们可以利用计算机的硬件设备来产生随机数。一个比较简单的方法是利用计算机的时间戳来产生随机数。
具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int MyRandom(int n, int m) {
int x;
do {
x = (int)time(NULL) % (m - n + 1) + n;
} while (x < n || x > m);
return x;
}
int main() {
int n = 1, m = 10;
int i;
for (i = 0; i < 10; i++) {
printf("%d ", MyRandom(n, m));
}
printf("\n");
return 0;
}
```
上述代码中,利用 `time(NULL)` 函数获取当前时间戳,然后对其取模得到一个在 `n` 到 `m` 之间的整数。由于每次调用 `time(NULL)` 得到的时间戳是不同的,因此每次调用 `MyRandom` 函数得到的随机数也是不同的。同时,由于对时间戳取模,使得返回的随机数在 `n` 到 `m` 之间是均匀分布的。
需要注意的是,由于时间戳是有限的,因此在短时间内多次调用 `MyRandom` 函数可能会得到相同的随机数。如果需要更高的随机性,可以结合其他硬件设备(如热噪声、放射性核衰变等)来产生随机数。
阅读全文