2017-11-17 14 views
-1

저는 Harvard CS50 온라인 PSET3 및 온라인 CS50 게임의 "won"기능에 문제가 있습니다."원"기능이 잘못되었습니다

함수는 4x4 그리드 퍼즐과 함께 잘 작동하지만 3 × 3

과 기능은 몇 가지 단계가 너무 일찍 3 × 3의 경우 true를 반환합니다.

이 기능은 3x3 크기 게임의 경우 1에서 8, 4x4 크기 게임의 경우 1에서 15의 ​​오름차순으로 배열을 조사해야하며 배열의 마지막 요소는 0입니다.

코드에 대한 나의 생각 프로세스는 처음에 카운터를 1로 설정하고 배열의 첫 번째 요소와 대조하여 확인하는 것입니다. 일치하는 경우 카운터를 1 씩 증가시키고 다음 요소에 대해 반복합니다.

카운터가 배열의 총 요소 수에 도달하면 true를 반환하고 카운터가 언제든지 해당 배열 요소와 일치하지 않으면 false를 반환합니다.

내가 잘못하고있는 것을 볼 수 있습니까? 사실

/** 
* Returns true if game is won (i.e., board is in winning configuration) 
* else false. 
*/ 
bool won(void) 
{ 
    // TODO 

    int counter = 1; 

    for (int i=0; i < d; i++) 
    { 
     for (int j=0; j < d; j++) 
     { 
      if (board[i][j] == counter) 
      { 
       counter++; 
      } 
      if (counter == (d*d)) 
      { 
       return true; 
      } 
     } 
    } 
    return false; 
} 
+3

[최소, 완료 및 확인 가능한 예제] (https://stackoverflow.com/help/mcve)를 읽으십시오.이 코드가 모두 필요한 것은 아닙니다. – klutt

+0

Klutt, 조언을 많이 주셔서 감사합니다, 나는 stackoverflow 및 코딩/CS에 처음 두렵다. 나는 코딩과 stackoverflow 코드를 배우게 될 것이다 :-) –

+0

:'int board [DIM_MAX] [DIM_MAX];는 항상 9x9 행렬을 생성하고,'move()'함수는 실제 '채워진'행렬은 더 작습니다. – user3629249

답변

1

귀하의 won 돌아 간다 모든 요소는 값이 0 인 요소를 무시하고, 순서에있는 경우. 이 _ 위 표시되는 0을 볼 때 그것은 counter를 증가하지 않을 것이다는 2 일 볼 때

1 2 3 
_ 4 5 
6 7 8 

그런 다음 코드 counter가 증가하며, 3 : 따라서, 요소가있는 경우. 그런 다음 counter이 4, 5, 6, 7 및 8을 볼 때 증가합니다. counter은 9이므로 d*d과 같으며 won이 true를 반환합니다.

기본적으로 won 루틴은 너무 유연합니다. 각 단계에서 현재 요소가 counter 인 경우 counter을 증분하지만 그렇지 않은 경우 수동입니다. 즉, 원하는 조건이 충족되지 않아도 검사를 계속합니다. "우승"위치가 하나뿐이기 때문에 어떤 요소가 맞지 않으면 false을 즉시 반환 할 수 있습니다.

+0

그게 효과가! 함수의 새로운 코드는 다음과 같습니다. bool won (void) { // TODO int counter = 1; 가 (, i가 D를 <; I = 0 int로 난 ++) (, J