2016-09-27 11 views
-2

5X5配列とベクトルを使用するシャッフルプログラムを作成しました。ベクトルは値1〜25を格納する必要があり、配列は要素ごとに0を持つ必要があります。 shuffle()関数が渡されると、配列内のベクトルの1から25の値がランダムに配置されます。最後の実行でシャッフリング機能が正しく動作しない

void Match::shuffle() { 

    std::vector<int> vec(25); 

    int randNum = rand() % (vec.size()); 

    for (int i = 1; i < 26; i ++) { 
      vec.push_back(i); 
    } 
    for (int i = 0; i < 5; i++) { 
      for (int j = 0; j < 5; j++) { 
      backArr[i][j] = vec.at(randNum); 
      vec.erase(vec.begin() + randNum); 

      randNum = rand()%vec.size(); 
      } 
    } 

}

+2

問題文が単純に「動作しません」の場合、ソリューションを提供することは困難です。実際の結果とどのように違うのか、そしてどのようなことが起こるのかをより完全に説明するために質問を編集してください。何が良い説明になるかについてのヒントについては、[ask]を参照してください。 –

+0

[MCVE]が必要です。 –

+0

http://stackoverflow.com/questions/6127503/shuffle-array-in-c。これは助けるかもしれない –

答えて

0

あなたがベクターから最後の要素を削除して失敗するrand() % 0を算出するrandNum = rand()%vec.size();を計算する(すなわち、backArr[i][j]後に設定されています)。

backArr[i][j] = vec.at(randNum);より前にrandNumを計算してください(ループの前にあるrandNumも削除してください)。

補遺:としてはコメントで@infixedが指摘し、あなたはまた、25(デフォルト初期化)要素のベクトルを作成し、その後これによる25個の要素を追加(プッシュ、私の答えの最初の部分は、実際にあります違います)。 これを解決するには、vecを宣言するときに(25)を削除するか、push_back命令を対応するベクタアクセス(置き換えに気をつけてください)に置き換える必要があります。

+0

これは本当にありがとうございます。 – Drew

0

なぜstd :: random_shuffleを使用しないのですか?

+0

std:random_shuffleの使用を避けたい – Drew

関連する問題