C++如何生成随机每周整数
问题描述:
我已经创建了此代码,每天生成一个随机整数值。 所以今天rand()会返回3,例如我每次调用它,明天它会生成另一个值。C++如何生成随机每周整数
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周二改变,保持全周相同,直到下一次。
不幸的是,我还没有找到任何解决方案。有人能帮助我吗?
UPDATE:
我尝试(和可能的解决方案?):
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时间。
因此,计算1970年1月的一个星期二,在恰当的时间。
然后从当前time_t中删除它。这会给你从那以后的秒数。
所有你需要做的,除以24 * 60 * 60 * 7以获得每个星期二的重复值。
+0
我的代码现在完美的工作,遵循你的建议。谢谢! 我会更新我的第一篇文章 – Joseph
“_i还没有找到任何解决方案_”您是否至少尝试过一些东西?请出示您的解释,说明为什么它不适合您的需求。 –
当您将每日解决方案延长到每周时,您有什么问题? –
http://idownvotedbecau.se/noattempt/ – Oleg