2014-03-12 4 views
-4
char Chessboard[8][8] = {'r', 'n', 'b', 'q', 'k', 'b', 'n', 'r', '*', '*', '*', '*', '*', '*', '*', '*',\ 
    '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', \ 
    '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '+', '+', '+', '+', '+', '+', '+', '+',\ 
    'R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R'}; //Initializing board 

그래서 나는이 체스 판을 가지고 있는데, 상대방과 대면하도록 돌려 놓기를 원한다. 일명 반대로 배열은 값이 역순이되도록한다. 난 그냥이 배열을 반대로 배열 Chessboard에 저장하는 프로그램이 필요하므로 단순히 printf 함수가 아닙니다.어떻게 배열을 뒤집을 수 있습니까?

나를 도와 줄 사람이 있습니까?

+6

우리가 작업 할 수있는 아이디어 나 코드가 있습니까? 아니면 어떤 종류의 노력도 피할 수 있도록 코드를 작성하기를 원하십니까? –

답변

1

정말 간단합니다. 이것은 반전이 아니라 180도 회전입니다. 좌표면에서 i,j7-i,7-j으로 매핑하면됩니다.

당신은 보드 타입 할 것 :

typedef char Board[8][8]; 

을 그리고 당신은이 기능을 사용합니다 :

Board reversed(const Board board) 
{ 
    Board result; 
    for (int i=0; i<8; i++) 
     for (int j=0; j<8; j++) 
      result[i,j] = board[7-i,7-j]; 
    return result; 
} 
+1

'7-i','7-j'이어야합니다. – Zong

+0

'i, j'에서 '7-i, 7-j'로 맵핑하는 것은 크기 64의 1 차원 배열로 보는 것과 동일하기 때문에 여기에 중첩 루프를 실제로 수행 할 필요가 없다는 사실에 주목할 필요가 있습니다 'i'를 '63-i'로 매핑한다. 실제로 오프셋 64의 바이트가 널 바이트라는 것을 확신 할 수 있다면 간단히'strrev' (시스템에'strrev'가 있다고 가정)를 수행하여이 역전을 수행 할 수 있습니다. –

+0

@ 니가 원한다면 너는 그런 종류의 일을 할 수 있겠지만, 왜 그랬 겠니? 여기에 표현 된 높은 수준의 견해에 대해 열심히 무엇입니까? –

0

이 의심 누군가 같은 소리는 CS의 숙제 .... 행운의 해당 중첩 루핑 테스트 :-)

int i, j; 
for(i=0;i<4;i++){ 
    //just give each entry the value of its mirror by doing a swap 
    for(j=0;j<8;j++){ 
    char tmp = Chessboard[i][j]; 
    Chessboard[i][j] = Chessboard[7-i][7-j]; 
    Chessboard[7-i][7-j] = tmp; 
    } 
} 
+0

이 특별한 예에서는 스왑으로 인해 전반적으로 절반 만 이동해야합니다. –

관련 문제