测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A41018. 做幻方

填空题 困难

题目描述

做幻方

题目描述

Apple最近迷上了做幻方,Apple还是个中高手,只要你说个奇数N就能把N*N的幻方做出来。其实你可以比他做得更好的。Apple总是画得很乱,而你可以利用程序排得很整齐^_^ 幻方的要求:每一行,每一列,还有两条斜线上数字的和都相等.

输入格式

每行一个奇数N(0< N < 30),输入0结束

输出格式

输入一个奇数,输出一个幻方,顺序参照样板输出;同一列的数右对齐,数与数用一个空格分开;输出完以后加一个回车。

样例输入

5

1

0

样例输出

11 18 25  2  9

10 12 19 21  3

 4  6 13 20 22

23  5  7 14 16

17 24  1  8 15


1


参考答案

#include <stdio.h> int main() { int n, i, j, t, x, m; while (scanf("%d", &n)&&n) { int a[31][31] = { 0 }; a[1][(n + 1) / 2] = 1; t = 2; x = 1; for (i = n,j= (n + 1) / 2 + 1; t<=n*n; i--,j++,t++) { if (a[i][j] != 0) { i = i + 2; j--; } if (j > n &&i>=1) { j = 1; } if (i < 1&&j<=n) { i = n; } if (i<1 && j>n ) { i = i + 2; j--; } a[i][j] = t; } m = n*n; while (m != 0) { m = m / 10; x = x * 10; } x = x / 10; for (i = n ; i >= 1; i--) { for (j = 1; j <= n; j++) { if(x == 1) printf("%d", a[i][j]); if (x == 10) printf("%2d", a[i][j]); if (x == 100) printf("%3d", a[i][j]); if (j != n) printf(" "); } printf("\n"); } printf("\n"); } return 0; }
上一题 下一题