首页 > 代码库 > 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阶幻方)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。