幻方矩阵
Time Limit: 4000ms, Special Time Limit:8000ms, Memory Limit:2048KB
Total submit users: 547, Accepted users: 367
Problem 10029 : Special judge
Problem description
幻方是一种很有意思的数字矩阵,在很早著名的九宫八卦阵就与幻方有关。
幻方的定义为: 
1 到 N*N 的整数填入N*N的方格中,每行和每列以及对角线的数字之和必须是相等的。
你作为八卦公司的顶级程序员,现在需要你解决一个问题,将任意奇数阶的幻方找出来。

Input
输入包括多个测试集,每行为一个正奇数N(1 <= N < 1000),0作为输入的结束且不需要处理。

Output
对于输入的每一个N, 输出一个它所对应的N阶幻方,如果存在多个,任意一个即可。
每个幻方为N*N的矩阵,
对于每个幻方,每行输出幻方的一行,每行中的数字之间用一个或多个空格分开。 不同的幻方之间用一个空行分开。

Sample Input
1
3
0
Sample Output
1

4 9 2
3 5 7
8 1 6
Problem Source
昊博士

 

 1 #include<iostream>
 2 using namespace std;
 3 
 4 int f(int n)
 5 {
 6     int i,j,ans;
 7  for(i=1;i<=n;i++)
 8  {
 9      for(j=1;j<=n;j++)
10   {
11       ans=((i+j+(n-3)/2)%n)*n+(i-j+(3*n-1)/2)%n+1;
12    if(j<n)
13    {
14     printf("%d ",ans);
15    }
16    else
17     printf("%d\n",ans);
18   }
19  }
20  return 0;
21 }
22 
23 int main()
24 {
25   int n;
26  while(scanf("%d",&n) && n)
27  {
28     f(n);
29     printf("\n");
30  }
31 }
posted on 2012-07-19 21:50  黑色的铅笔  阅读(808)  评论(0编辑  收藏  举报