2016-09-27 2 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(); 
      } 
    } 

} (backArr[i][j] 설정 한 즉, 후) 마지막 실행에

+2

문제 설명이 단순히 "작동하지 않음"인 경우 솔루션을 제공하기가 어렵습니다. 일어날 것으로 예상되는 것과 그 결과가 실제 결과와 어떻게 다른지에 대한 자세한 설명을 제공하려면 질문을 편집하십시오. 좋은 설명이 무엇인지 힌트를 얻으려면 [ask]를 참조하십시오. –

+0

[MCVE]가 필요합니다. –

+0

http://stackoverflow.com/questions/6127503/shuffle-array-in-c. 이것은 도움이 될 수도있다 –

답변

0

당신은 벡터에서 마지막 요소를 제거하고 실패합니다 rand() % 0 계산 randNum = rand()%vec.size();을 계산합니다.

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

관련 문제