C ++如何生成随机的每周整数

时间:2017-10-18 17:58:13

标签: c++ random srand

我已创建此代码,每天生成一个随机整数值。 所以今天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();

1 个答案:

答案 0 :(得分:1)

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

最简单的方法就是让0时间适合你。

所以在恰当的时间计算1970年1月的星期二。

然后从当前time_t中删除它。这将为您提供自那时起的秒数。

你需要做的就是除以24 * 60 * 60 * 7来获得每个星期二的重复值。