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
|
#include<stdio.h>
int matrix[100][100]={0};
int t=0;
void chessboard(int tr,int tc,int dr,int dc,int size);
int main(){
int size;
int dr,dc;
int i,j;
scanf("%d",&size);
scanf("%d %d",&dr,&dc);
chessboard(0,0,dr,dc,size);
for(i=0;i<size;i++){
for(j=0;j<size;j++){
printf("%2d ",matrix[i][j]);
}
printf("\n");
}
return 0;
}
void chessboard(int tr,int tc,int dr,int dc,int size){
if(size==1)return;
int s=size/2;
int cnt;
cnt=t+1;
t++;
//特殊方格在左上部分
if(dr<tr+s&&dc<tc+s){
chessboard(tr,tc,dr,dc,s);
}
else {
matrix[tr+s-1][tc+s-1]=cnt;
chessboard(tr,tc,tr+s-1,tc+s-1,s);
}
//特殊方格在右上部分
if(dr<tr+s&&dc>=tc+s){
chessboard(tr,tc+s,dr,dc,s);
}
else {
matrix[tr+s-1][tc+s]=cnt;
chessboard(tr,tc+s,tr+s-1,tc+s,s);
}
//特殊方格在左下部分
if(dr>=tr+s&&dc<tc+s){
chessboard(tr+s,tc,dr,dc,s);
}
else {
matrix[tr+s][tc+s-1]=cnt;
chessboard(tr+s,tc,tr+s,tc+s-1,s);
}
//特殊方格在右下部分
if(dr>=tr+s&&dc>=tc+s){
chessboard(tr+s,tc+s,dr,dc,s);
}
else {
matrix[tr+s][tc+s]=cnt;
chessboard(tr+s,tc+s,tr+s,tc+s,s);
}
}
|