首页 > 代码库 > codeforces 710C Magic Odd Square(构造或者n阶幻方)

codeforces 710C Magic Odd Square(构造或者n阶幻方)

Find an n × n matrix with different numbers from 1 to n2, so the sum in each row, column and both main diagonals are odd.

Input

The only line contains odd integer n (1 ≤ n ≤ 49).

Output

Print n lines with n integers. All the integers should be different and from 1 to n2. The sum in each row, column and both main diagonals should be odd.

Examples
input
1
output
1
input
3
output
2 1 4
3 5 7
6 9 8
分析:给你与1个奇数n, 让你构造一个n * n 的矩阵,要求保证这个矩阵的每行每列和主对角线上数字的和为奇数。
构造:
 1 #include<bits/stdc++.h> 2 using namespace std; 3 int ans[50][50]; 4  5 int main() 6 { 7     int n; 8     ios::sync_with_stdio(false); 9     cin.tie(0);10     cin >> n;11     memset(ans,0,sizeof(ans));12     int num1 = 1,num2 =2,cnt1 = (n+1)/2,cnt2 = (n+1)/2;13     for(int i = 1; i <= n; i++)14     {15         for(int j = 1; j <= n; j++)16         {17             if(abs(cnt1 - i) + abs(cnt2 - j) <= n/2) // 为什么这么写,有点不清楚18                 ans[i][j] = num1,num1 += 2;19             else20                 ans[i][j] = num2,num2 += 2;21         }22     }23     for(int i = 1; i <= n; i++)24     {25         for(int j = 1; j< n; j++)26         {27             printf("%d ",ans[i][j]);28         }29         printf("%d\n",ans[i][n]);30     }31     return 0;32 }

n阶幻方:

 1 # include <stdio.h>   2 # include <string.h>   3 int g[50][50];   4 int main(){   5     int i, j, k, n, x, y, r, c;   6     memset(g, 0, sizeof(g));   7     scanf("%d", &n);   8     r=1; c=(1+n)/2;   9     g[1][c]=1;  10       11     for(i=2; i<=n*n; i++){  12         x=r;y=c;  13         x=x-1;  14         if(x<1){  15             x=n;  16         }  17         y=y+1;  18         if(y>n){  19             y=1;  20         }  21         if(g[x][y]){  22             g[r+1][c]=i;  23             r=r+1;  24         }  25         else{  26             g[x][y]=i;  27             r=x;c=y;  28         }  29     }  30     for(i=1; i<=n; i++){  31         for(j=1; j<=n; j++){  32             if(j!=n)  33             printf("%d ", g[i][j]);  34             else{  35                 printf("%d\n", g[i][j]);  36             }  37         }  38           39     }  40     return 0;  41 }  

 

codeforces 710C Magic Odd Square(构造或者n阶幻方)