2013-12-13 4 views
0

을에 다이 :롤링 여러 내 컴퓨터 과학 클래스 연습 문제에서 일한지, 그 중 하나는 다음 읽고 C++

주사위의 쌍을 반복적으로 롤백됩니다. "박스 카"(6-6)가 나타나면 A 플레이어가 승리합니다. 그렇지 않으면 7이 두 번 연속으로 나타납니다 (하나의 다이가 7을 보여준 다음 둘 다 다시 굴리고 다른 하나가 나타나면 B가 승리합니다). 주사위 한 개를 1000 번 굴려서 A와 B가 몇 번이나 승리했는지 알 수있는 C++ 프로그램을 작성하십시오.

그래서 프로그램의 주된 백본을 얻었고 몇 번 테스트했지만 지금까지 B 플레이어가 매번 0 번 우승하는 것으로 나타났습니다. A 플레이어의 승리는 프로그램을 실행할 때마다 변동하므로 A가 올바르게 코딩되었지만 팁이나 디버깅이 크게 도움이 될 것입니다. 프로그램 :

#include <iostream> 
#include <ctime> 
using namespace std; 

int main() 
{ 
int die1, die2, store = 0, awin = 0, bwin = 0; 

srand(time(NULL)); 

for(int i = 0; i < 1000; i++) 
{ 
    die1 = rand()% 6+1; 
    die2 = rand()% 6+1; 

    if(die1 == 6 && die2 == 6) 
    { 
     awin++; 
    } 
    else if(die1 == 7 || die2 == 7) 
    { 
     store = 1; 
    } 

    if(store == 1 && die1 == 7) 
    { 
     bwin++; 
     store = 0; 
    } 
    else if(store == 1 && die2 == 7) 
    { 
     bwin++; 
     store = 0; 
    } 

    store = 0; 
} 

cout << "A has won " << awin << " times and B has won " << bwin << " times." << endl; 

system("pause"); 

}

+1

'(die1 == 7)'6 이제까지 죽을 양면 수있는 방법 7 다른 될 경우? –

+0

주사위의 몇 변입니까? – splrs

+0

저는 다이가 7에 해당하는 것이 실제로 불가능하다는 것을 알아 차 렸습니다. 그래서 저는 여기서 사지에 나가서 _ um_이 다이 중 하나가 아닌 7과 같다고 말할 것입니다. 나는 완전히 바보 같이 느껴진다. 그러나 나는 유기 화학 시험을 또한 가지고 있었다. 그래서 나는 쓰이는 종류 다. ..이 Lol.를 위해 유감스럽게 생각한다. – user3097575

답변

1

rand() % 7 당신에게 그것은 7로 나눈 나머지 번호의 7의 결과를주지 않을 것이다, 그래서 당신은 공을 사이에 아무것도 얻을 것이다 및 6.

귀하의 의견을 염두에두고 die1 + die2 == 7을 체크하면 정렬됩니다. 이 부분을 통해

+0

그래, 실제로 나는 다이가 6 개까지만 움직일 수 있다는 사실을 눈치 챘다. 그리고 교수는 그 um이 7과 같음을 의미했을지도 모른다. 나는 바보처럼 느껴진다 ... – user3097575

+0

나는 그것이 사실일지도 모른다라고 생각했다. 그러나 만일 그것이 축 어적으로 문제라면, 그는 적어도 부분적으로 잘못이있다. – splrs

0

rand()%6+1 1-6의 범위를 반환합니다.
store은 주사위가 7을 굴리는 조건에서만 할당됩니다. 절대로 발생하지 않습니다.
bwinstore이 주사위 굴림과 같으면 저장소가 0으로 초기화되고 다시 할당하기위한 조건 (롤링 7)이 충족 될 수 없기 때문에 절대 증가하지 않습니다.
따라서, bwin은 항상 0 만 주사위 롤 모두 awin 증가 6.

0

모든 것이 올바른 것 같다

if(die1 == 6 && die2 == 6) { 
    awin++; 
} 

그것은 일을 옆으로 얻을 그이 후입니다.

먼저 이전 롤이 7 인 경우, 확인하고 현재 롤 이전 롤과 일치하는 경우 : 그 true로 평가되면

if(store == 7 && store == die1 + die2) { 

를, B는 이겼다 : 그런 다음

bwin++; 
} 

현재 롤의 값을 저장 그래서 당신은 다음 롤에 대해 알고있는 것들 :

store = die1+die2; 
0

당신은 C 안 각각의 주사위를 7 개가 아니라 2 개의 주사위를 합하여 계산합니다.

보십시오이

for(int i = 0; i < 1000; i++) 
{ 
    die1 = rand()% 6+1; 
    die2 = rand()% 6+1; 

    if(die1 == 6 && die2 == 6) 
    { 
     awin++; 
    } 
    else if (store == 7 && (die1 + die2) == 7) 
    { 
     bwin++; 
    } 

    store = die1 + die2; 
}