16宮格的做法是,1到16依次寫進4階方陣中,然後將位置(1,1)與位置(4,4)上的對換,(2,2)與(3,3)上的對換。再將(1,4)與(4,1)對換,(2,3)與(3,2)對換。
基於這種思想我給出了一個程序,但是好像沒有輸出正確的結果。
#include
int main() {
int A[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int i,j;
for (i = 0; i < 2; i++) {
*(&A[0][0] + i * 4 + (i - 1)) = *(&A[0][0] + (4 - i) * 4 + (4 - i));//斜率為-1的對角線上數,(1,1)位子與(4,4)位子互換,(2,2)與(3,3)互換
*(&A[0][0] + i * 4 + (4 - i)) = *(&A[0][0] + (4 - i) * 4 + i);//斜率為1的對角線上的數,(1,4)與(4,1)互換,(2,3)與(3,2)互換,其他不變
}
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++)
printf("%3d ", *(&A[0][0] + i * 4 + j));
printf("\n");
}
return 0;
}
http://www.douban.com/group/topic/28700682/
http://blog.csdn.net/cmutoo/article/details/5487157