快速生成随机数据

  在对拍或出题时生成随机数据的种子若为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()

posted @   千叶繁华  阅读(261)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示