快速生成随机数据

  在对拍或出题时生成随机数据的种子若为time(0)(需要ctime或time.h头文件),发现1s内生成的数据都是一样的。这是因为time(0)是以1s为单位。为了使1s内生成的数据能有不同,可以适用单位精确到毫秒的有关时间的操作。

  注:以下操作的前提是windows环境,需要头文件windows.h。

1、SYSTEMTIME

  SYSTEMTIME是一个定义的结构体类型,具体定义代码:

 1   typedef struct _SYSTEMTIME {
 2     WORD wYear;
 3     WORD wMonth;
 4     WORD wDayOfWeek;
 5     WORD wDay;
 6     WORD wHour;
 7     WORD wMinute;
 8     WORD wSecond;
 9     WORD wMilliseconds;
10   } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;

  WORD是一个2字节的无符号整数。更多可看:https://blog.csdn.net/w2453476933/article/details/74090305 c++ 标准数据类型

  SYSTEMTIME类型的成员分别意义分别是年、月、周几、天、小时、分钟、秒、毫秒

  配合函数:GetSystemTime(&a) (为SYSTEMTIME类型的a赋值世界协调时)或GetLocalTime(&a) (为SYSTEMTIME类型的a赋值本地时间),a.wMilliseconds即可作为随机种子。

2、GetTickCount()

  GetTickCount()返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值类型是DWORD(一个占4字节的无符号整数)。可直接作为随机种子(虽然srand()参数类型是unsigned int短了点,但问题不大)。

  更详细可见:https://blog.csdn.net/mjshldcsd/article/details/7180962 C++ GetTickCount()和Sleep()

原文地址:https://www.cnblogs.com/InductiveSorting-QYF/p/15371933.html