2 2 3 3
2 -1 1 3
4 1 1 5
4 4 5 5
#include "stdio.h" int board[65][65], tile; /* tile 为纸片编号*/ void chessboard(int tr, int tc, int dr, int dc, int size) /* dr,dc依次为特殊方格的行、列号 */ { int t, s; if (size == 1) 1; t = tile++; s = size / 2; if ( 2 ) chessboard(tr, tc, dr, dc, s); else { board[tr + s - 1][tc + s - 1] = t; 3; } if (dr < tr + s && dc >= tc + s) chessboard(tr, tc + s, dr, dc, s); else { board[tr + s - 1][tc + s] = t; 4; } if (dr >= tr + s && dc < tc + s) chessboard(tr + s, tc, dr, dc, s); else { board[tr + s][tc + s - 1] = t; 5; } if (dr >= tr + s && dc >= tc + s) chessboard(tr + s, tc + s, dr, dc, s); else { board[tr + s][tc + s] = t; 6; } } void prt1(int b[][65], int n) { int i, j; for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) printf("%3d", b[i][j]); printf("\n"); } } int main(void) { int size, dr, dc; printf("input size(4/8/16/64):\n"); scanf("%d", &size); printf("input the position of special block(x,y):\n"); scanf("%d%d", &dr, &dc); board[dr][dc] = -1; tile++; chessboard(1, 1, dr, dc, size); prt1(board, size); }