我已创建此代码,每天生成一个随机整数值。 所以今天rand()将返回3,例如每次调用它,明天它会生成另一个值。
std::vector<MyObject> myList = getMyList();
time_t t = time(NULL);
tm *lt = localtime(&t);
int seed = lt->tm_mday + lt->tm_mon + 1 + lt->tm_year + 1900;
srand(seed);
dailyRand=rand();
int selectedID=rand() % myList.size();
MyObject obj = myList.at(selectedID);
现在我试图生成每周兰特,但是在周二00:00更改并在整个星期保持不变,直到下一周。
不幸的是我还没有找到任何解决方案。有人能帮助我吗?
更新:
我的尝试(也许解决方案?):
seed = trunc((lt->tm_yday + (lt->tm_year * 365)+1) / 7);
srand(seed);
rand();
它应该得到自0年以来的天数(+1因为01/01/1990是星期一而我需要星期二),然后除以7应该给我从星期二开始的1900周的星期数。 但我已尝试过一些价值观和
更新2: 我在@mksteve回复之后实现了它
time_t t = time(NULL);
tm *lt = localtime(&t);
int firstTuesday = 432000; // Tuesday 1970/01/06 at 00:00
int seed = (((t - firstTuesday)/60/60/24))/7;
srand(seed);
int r=rand();
答案 0 :(得分:1)
您正在寻找在特定时间变化的值。
最简单的方法就是让0时间适合你。
所以在恰当的时间计算1970年1月的星期二。
然后从当前time_t中删除它。这将为您提供自那时起的秒数。
你需要做的就是除以24 * 60 * 60 * 7来获得每个星期二的重复值。