幻方矩阵 |
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 }