《C语言程序设计现代方法》第八章数组 编程题17
打印出n*n的奇数方正,元素数字依次递增,排序方式要求每行每列和两条大斜线的和相同。
#include <stdio.h>
int i, j, k, l, juge;
int arr[15][15];
int m,n;
int checkMove(void);
void showSqaure(void);
int main (void)
{
scanf("%d",&i);
//i = 5;
k = 0 ;
l = 2 ;
j = 0 ;
juge = -1;
for (m = 0; m < i; m++){
for (n = 0; n < i; n++)
arr[m][n] = 0;
}
checkMove();
showSqaure();
return 0;
}
int checkMove()
{
//check & traceback
if (k < 0)
k = k + i;
else if (k >= i)
k = k - i;
else if (l < 0)
l = l + i;
else if (l >= i)
l = l - i;
else if (arr[k][l] != 0) {
k += 2;
l -= 1;
}else
juge += 1;
//move
if ( j == juge ){
j++;
if(j < i*i) {
arr [k][l] = j;
k--;
l++;
checkMove();
}else if (j = i*i){
arr [k][l] = j;
return 0;
}
}else if ( j != juge )
checkMove();
}
void showSqaure()
{
for (m = 0; m < i; m++){
for (n = 0; n < i; n++)
printf("%2d ", arr[m][n]);
putchar('\n');
}
}