设计一“真随机数”函数:int MyRandom(int n,int m); 功能:n<m,随机产生n~m之间的整数,要求每次调用返回一随机数,均匀分布在n~m之间,注意程序每次运行,其产生的随机数是不同的。 注: 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而C语言中的随机函数 rand()是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。而本题要求为不可预见的真随机数。 附:随机函数实例 #include <stdio.h> #include <time.h> #include <stdlib.h> int main () { srand(time(NULL)); //随机函数初始化 提示:只需要埋一次种子即可 printf("%d\n",rand()%100); //产生一个0-99的随机数 return 0; }
时间: 2024-04-01 22:31:04 浏览: 64
非常感谢您的提醒和补充!实际上,C语言中的rand()函数生成的随机数是伪随机数,而非真正意义上的随机数。为了实现真随机数生成,我们需要利用物理随机数发生器或者网络上的真随机数服务。
以下是一个使用网络上的真随机数服务生成随机数的例子:
```c++
#include <stdio.h>
#include <curl/curl.h>
int get_random_number(int n, int m) {
CURL *curl;
CURLcode res;
int rand_num;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://www.random.org/integers/?num=1&min=0&max=1000000000&col=1&base=10&format=plain&rnd=new");
res = curl_easy_perform(curl);
if (res == CURLE_OK) {
sscanf(curl_easy_strerror(res), "%d", &rand_num);
}
curl_easy_cleanup(curl);
}
int range = m - n + 1; // 计算n~m之间的整数范围
rand_num = rand_num % range + n; // 映射到n~m之间的整数
return rand_num;
}
int main() {
int n = 1, m = 10;
int rand_num = get_random_number(n, m);
printf("Random number between %d and %d: %d\n", n, m, rand_num);
return 0;
}
```
在这个例子中,我们使用了网络上的真随机数服务(https://www.random.org/integers/)生成一个0到1000000000之间的随机整数,然后将其映射到n~m之间的整数。需要注意的是,这种方式需要联网,并且网络延迟可能会影响随机数的生成效率。
阅读全文