使用随机数函数rand()模拟出拳信息 使用时间作为种子 srand() 时间需要岔开,否则产生的随机数会相同 srand((unsigned)time(0) * 3000 ); srand((unsigned)time(NULL)* i );
时间: 2023-06-22 21:41:05 浏览: 73
是的,你说的很对。为了避免产生相同的随机数,需要在每个进程中使用不同的种子。而时间是一个很好的种子,可以保证每个进程使用的种子都不同。
可以使用`srand()`函数来设置随机数生成器的种子,然后使用`rand()`函数来生成随机数。为了保证每个进程使用不同的种子,可以使用当前时间的秒数作为种子,并乘以一个不同的整数,例如进程的pid或者进程的编号。
下面是一段示例代码,可以用于在进程中生成随机数:
```
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
int main() {
// 使用当前时间作为种子,并乘以进程的pid
srand((unsigned)time(NULL) * getpid());
// 生成0到99之间的随机数
int num = rand() % 100;
// 打印随机数
printf("Random number: %d\n", num);
return 0;
}
```
在这个示例代码中,使用`srand((unsigned)time(NULL) * getpid())`来设置随机数生成器的种子,使用`rand() % 100`来生成0到99之间的随机数。由于每个进程的pid都是不同的,因此每个进程使用的种子也是不同的,可以保证生成的随机数都不同。
相关问题
写一个c语言程序不使用 srand 和 rand 函数不使用时间做种子,能随机产生100以内的数
好的,这是一个有趣的问题!下面是一个可以随机生成100以内数的程序:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int random_num;
time_t t;
// 获取当前时间作为种子
time(&t);
// 使用时间值初始化随机数发生器
srand((unsigned int)t);
// 随机生成100以内的数
random_num = rand() % 100;
// 输出生成的随机数
printf("生成的随机数为:%d\n", random_num);
return 0;
}
```
上面代码中,我们使用 `time` 函数获取当前时间,并将其作为随机数生成器种子,以保证每次程序运行都能产生不同的随机数。然后使用 `rand()` 函数产生一个随机数,使用 `% 100` 取余得到100以内的数。
希望这个程序能够帮助到你!
用c代码写一个随机数不用rand()和srand()和线性同余法
可以使用系统时间来生成随机数。
首先,通过系统函数time(NULL)获取当前时间(以秒为单位),然后将其作为种子来生成随机数。为了增加随机性,可以使用时间的毫秒部分作为随机数生成的一部分。
下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <time.h>
int main() {
int r;
struct timespec tm;
clock_gettime(CLOCK_REALTIME, &tm);
// 以秒为单位的时间作为种子
srand((unsigned int) tm.tv_sec);
// 通过时间的毫秒部分生成随机数
r = (tm.tv_nsec % 100) + 1;
printf("随机数为:%d\n", r);
return 0;
}
```
此代码将使用当前时间作为种子,将时间的毫秒部分取模后加1作为随机数。注意,这并不是一个完全随机的算法,但对于大多数情况下的随机数需求已经足够了。