2017-10-18 25 views
-4

毎日ランダムな整数値を生成するこのコードを作成しました。 今日、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(); 

1990年1月1日が月曜日だったと私は必要なので、それは年0(+1以降の日数を取得する必要があります代わりに火曜日)、7で割り算すると、火曜日から始まる1900年からの週の数が分かります。 しかし、私はいくつかの値で試してみたと

UPDATE 2: は、私はあなたが特定の時間に変化する値を探している

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

答えて

1

返信@mksteve以下を実現しました。

これを動作させる最も簡単な方法は、あなたに合った時間を0にすることです。

したがって、正確な時期に1970年1月の火曜日を計算します。

次に、現在のtime_tから削除します。それはあなたにその時からの秒数を与えるでしょう。

あなたがする必要があるのは、毎週火曜日の反復値を得るために24 * 60 * 60 * 7で割ります。

+0

あなたの提案に従い、私のコードが完全に機能するようになりました。ありがとうございました! 最初の投稿を更新します – Joseph

関連する問題