1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| #include <stdio.h> #include <stdlib.h> #include <string.h>
int nCount = 0; int Matrix[100][100];
void ChessBoard(int Top_Left_X, int Top_Left_Y, int Special_X, int Special_Y, int Size);
int main() { int Size, Special_X, Special_Y; memset(Matrix, 0, sizeof(Matrix)); scanf_s("%d", &Size); scanf_s("%d%d", &Special_X, &Special_Y); ChessBoard(0, 0, Special_X, Special_Y, Size);
for (int i = 0; i < Size; i++) { for (int j = 0; j < Size; j++) { printf("%2d ", Matrix[i][j]); } printf("\n"); } }
void ChessBoard(int Top_Left_X, int Top_Left_Y, int Special_X, int Special_Y, int Size) { int s; int t;
if (1 == Size) return;
s = Size / 2; t = ++nCount;
if (Special_X < (Top_Left_X + s) && Special_Y < (Top_Left_Y + s)) { ChessBoard(Top_Left_X, Top_Left_Y, Special_X, Special_Y, s); } else { Matrix[Top_Left_X + s - 1][Top_Left_Y + s - 1] = t; ChessBoard(Top_Left_X, Top_Left_Y, Top_Left_X + s - 1, Top_Left_Y + s - 1, s); }
if (Special_X >= (Top_Left_X + s) && Special_Y < (Top_Left_Y + s)) { ChessBoard(Top_Left_X + s, Top_Left_Y, Special_X, Special_Y, s); } else { Matrix[Top_Left_X + s][Top_Left_Y + s - 1] = t; ChessBoard(Top_Left_X + s, Top_Left_Y, Top_Left_X + s, Top_Left_Y + s - 1, s); }
if (Special_X < (Top_Left_X + s) && Special_Y >= (Top_Left_Y + s)) { ChessBoard(Top_Left_X, Top_Left_Y + s, Special_X, Special_Y, s); } else { Matrix[Top_Left_X + s - 1][Top_Left_Y + s] = t; ChessBoard(Top_Left_X, Top_Left_Y + s, Top_Left_X + s - 1, Top_Left_Y + s, s); }
if (Special_X >= (Top_Left_X + s) && Special_Y >= (Top_Left_Y + s)) { ChessBoard(Top_Left_X + s, Top_Left_Y + s, Special_X, Special_Y, s); } else { Matrix[Top_Left_X + s][Top_Left_Y + s] = t; ChessBoard(Top_Left_X + s, Top_Left_Y + s, Top_Left_X + s, Top_Left_Y + s, s); } }
|