2017-12-08 6 views
1

기본 질문은 위의 예와 같습니다.
내가 얻을 때까지 6면 주사위를 굴려 보겠습니다. a 4 그리고이 "게임"을 10 번하십시오.
이제 4를 얻는 데 필요한 던지기 수에 대한 매우 기본적인 확률 분포를 얻고 싶습니다. 2 게임에서 나는 단지 1 번 던지기, 4 번 3 번 던지기, 3 번 4 번 던지기, 그리고 1 번 경기에서 78 번 던지기 만했다. 그래서 게임을하기 전에 얼마나 많은 던지기가 필요한지를 결코 알지 못한다. 게임은 끝없이 계속 될 수있다.
레코드 보관을 단순화하기 위해 벡터의 위치/인덱스가 4를 얻는 데 필요한 throw 수를 나타내며 위치 값에 얼마나 많은 수의 throw가 필요한지 알려줍니다. 그래서 이전 예제를위한 그런 벡터는 sth처럼 보일 것입니다. {0, 2, 0, 4, 3, 0, [다른 72 개의 제로 (0), 1}.
C++에서 어떻게 작성합니까?벡터의 위치 값을 변경하면 해당 위치가 자동으로 생성되고 필요한 경우 벡터 범위가 증가합니다

(나는 전에 비슷한 질문이 있었음에도 불구하고 일치하는 질문을 찾을 수 없었을 것입니다.) 또한 C++을 배우기 시작 했으니까요. 't은 솔루션을 이해하는 것이 필요합니다.) OP로 std::vector로 변경

C++-Code/Pseudocode 
vector<int> recordvec = {0}; 
for (1 to 10){ 
    game(); 
    recordvec[game.throwsneededtowin()]=recordvec[game.throwsneededtowin()] +1 
    //How to make sure that I don't get an out-of-range error here if game.throwsneededtowin() is e.g. 1464? 
} 
print recordvec 
+0

사용할 수있는 요청 'vector :: push_back'은 위치를 증가시키고 vector [i] = something은 값을 변경합니다 –

+0

답해 주셔서 감사합니다.하지만 push_back을 사용하여 벡터 크기를 특정 위치 (단지 하나가 아닌)로 증가시킬 수 있습니까? 첫 번째 게임 후에 game.throwsneededtowin()이 = 23 인 경우 예제 23에서 인덱스 23이 포함되도록 벡터 범위를 어떻게 변경합니까? 한 번에 값을 할당하고 벡터 범위를 늘릴 수있는 방법이 있습니까? 내가 sth라고 쓰면. recordvec [23] ++와 23 위치는 recordvec에 대해 아직 존재하지 않습니다. 자동으로 추가되고 0으로 설정된 다음 1 씩 증가합니다. – someonesomewhere

+0

예'vector.push_back ("value");을 사용합니다. –

답변

0

#include <iostream> 
#include <vector> 
#include <ctime> 

int main() 
{ 
    std::vector<int> stats; 
    std::srand(static_cast<unsigned int>(std::time(0))); 

    for (int i = 0; i < 10; ++i) 
    { 
     int is4; 
     size_t throws = 0; 
     do 
     { 
      is4 = int(std::rand() % 6 + 1 == 4); 
      if (throws < stats.size()) 
       stats[throws] += is4; 
      else 
       stats.push_back(is4); 
      ++throws; 
     } 
     while (!is4); 
    } 

    for (auto const &stat : stats) 
     std::cout << stat << " "; 

    std::cout << std::endl; 


    system("pause"); 
    return 0; 
} 

enter image description here

+0

답장을 보내 주셔서 감사합니다.하지만 저는해야합니다. 벡터를 사용하기로되어있는 학교 운동에 대한 질문과 유사하므로이 경우 솔루션을 활용할 수 없습니다. – someonesomewhere

+0

@someones 어딘가에서'std :: vector'를 사용하도록 코드를 수정했습니다 –

+0

작동합니다. 고마워. – someonesomewhere