根据书上给的算法 ,我写了这个小程序,见笑了。 #include <stdio.h> #define MAXSIZE 16 int chess[MAXSIZE][MAXSIZE];void chess_board(int tr, int tc, int dr, int dc, int size)...{ static int tile = 1; if(1==size) return; int t = tile++; int s = size/2; /**//**//**//* ---- left-up corner ---- */ if(dr<tr+s && dc<tc+s)...{ chess_board(tr, tc, dr, dc, s); } else ...{ chess[tr+s-1][tc+s-1] = t; chess_board(tr, tc, tr+s-1, tc+s-1, s); } /**//**//**//* ---- right-up corner --- */ if(dr<tr+s && dc>=tc+s)...{ chess_board(tr, tc+s, dr, dc, s); } else ...{ chess[tr+s-1][tc+s] = t; chess_board(tr, tc+s, tr+s-1, tc+s, s); } /**//**//**//* ---- left-down corner--- */ if(dr>=tr+s && dc<tc+s)...{ chess_board(tr+s, tc, dr, dc, s); } else ...{ chess[tr+s][tc+s-1] = t; chess_board(tr+s, tc, tr+s, tc+s-1, s); } /**//**//**//* ---- right-down corner-- */ if(dr>=tr+s && dc>=tc+s)...{ chess_board(tr+s, tc+s, dr, dc, s); } else ...{ chess[tr+s][tc+s] = t; chess_board(tr+s, tc+s, tr+s, tc+s, s); }} void print_chess(int size,int a,int b)...{ int i, j; for(i = 0; i<size; i++)...{ for(j=0; j<size; j++)...{ if(i==(a-1)&&j==(b-1)) printf("%3c",2); else printf("%3d",chess[i][j]); } printf(" "); }} int main( int argc, char *argv[] )...{ int a=0,b=0,c=0; printf("********************************************************* "); printf("* 实验一:棋盘覆盖算法 * "); printf("********************************************************* "); printf(" 请输入您的棋盘的边长(注意:边长需要是2的N次方数):"); scanf("%d",&a); while(a>MAXSIZE) ...{ printf("您输入的棋盘太大了,无法完成绘画: "); printf(" 请输入您的棋盘的边长(注意:边长需要是2的N次方数):"); scanf("%d",&a); } printf("请输入您的棋盘的特殊方格的位置(中间逗号隔开):"); scanf("%d,%d",&b,&c); printf("您的棋盘: "); print_chess(a,b,c); chess_board(0, 0, b-1, c-1, a); printf("您实现棋盘覆盖后的棋盘: "); print_chess(a,b,c); printf("谢谢使用,再见!_ "); return 0;}