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(); 
+1

“_i还没有找到任何解决方案_”您是否至少尝试过一些东西?请出示您的解释,说明为什么它不适合您的需求。 –

+1

当您将每日解决方案延长到每周时,您有什么问题? –

+1

http://idownvotedbecau.se/noattempt/ – Oleg

您正在寻找其在特定的时间变化的值。

让这个工作最简单的方法是有一个适合你的0时间。

因此,计算1970年1月的一个星期二,在恰当的时间。

然后从当前time_t中删除它。这会给你从那以后的秒数。

所有你需要做的,除以24 * 60 * 60 * 7以获得每个星期二的重复值。

+0

我的代码现在完美的工作,遵循你的建议。谢谢! 我会更新我的第一篇文章 – Joseph