【NOIP2015】神奇的幻方
来源:互联网 发布:外国知乎瞧不起中国 编辑:程序博客网 时间:2024/04/28 23:19
【codevs 4510】
4510 神奇的幻方 noip2015day1 T1
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题解
题目描述 Description
幻方是一种很神奇的N∗N矩阵:它由数字 1,2,3, … … ,N∗N构成,且每行、每列及两条对角线上的数字之和都相同。
当N为奇数时,我们可以通过以下方法构建一个幻方:
首先将 1写在第一行的中间。之后,按如下方式从小到大依次填写每个数(K= 2,3, … ,N∗N ):
1.若 (K−1)在第一行但不在最后一列,则将 填在最后一行,(K−1)所在列的右一列;
2.若 (K−1)在最后一列但不在第一行,则将填在第一列,( K−1)所在行的上一行;
3.若 ( K−1)在第一行最后一列,则将填在(K −1)的正下方;
4.若 (K−1)既不在第一行,也不在最后一列,如果( K−1)的右上方还未填数,
则将 K填在( K−1)的右上方,否则将填在( K− 1)的正下方。
现给定N,请按上述方法构造N∗N的幻方。
输入描述 Input Description
输入文件只有一行,包含一个整数,即幻方的大小。
输出描述 Output Description
输出文件包含N行,每行N个整数,即按上述方法构造出的N∗N的幻方。相邻两个整数之间用单个空格隔开。
样例输入 Sample Input
3
样例输出 Sample Output
8 1 6
3 5 7
4 9 2
数据范围及提示 Data Size & Hint
对于 100%的数据,1 ≤ N ≤ 39且为奇数。
题解如题面所示
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,num[50][50];int mid;bool xczhw = true;int main(){ memset(num,0,sizeof(num)); scanf("%d",&n); mid = (n + 1) >> 1; num[1][mid] = 1; int k = 2; while(k <= n * n) { int cnt = 0,sum = 0; for(int j = 1; j < n; j ++) if(num[1][j] == k-1) num[n][j+1] = k,k ++; for(int i = 2; i <= n; i ++) if(num[i][n] == k-1) num[i-1][1] = k,k ++; if(num[1][n] == k-1) num[2][n] = k,k ++; for(int j = 1; j <= n; j ++) if(num[1][j] != k-1) cnt ++; if(cnt == n) for(int i = 1; i <= n; i ++) if(num[i][n] != k-1) sum ++; if(sum == n) { for(int i = 1; i <= n; i ++) for(int j = 1; j <= n; j ++) { if(num[i][j] == k-1) if(num[i-1][j+1] == 0) num[i-1][j+1] = k,k ++; else num[i+1][j] = k,k ++; } } } for(int i = 1; i <= n; i ++) for(int j = 1; j <= n; j ++) { if(j == n) printf("%d\n",num[i][j]); else printf("%d ",num[i][j]); } return 0;}
0 0
- 【NOIP2015】神奇的幻方
- 【NOIP2015】神奇的幻方
- noip2015神奇的幻方
- [NOIP2015] 神奇的幻方 D1 T1
- 【NOIP2015】Day1T1 神奇的幻方
- 神奇的幻方(NOIP2015)
- Noip2015 Day1 T1 神奇的幻方
- NOIP2015提高组 神奇的幻方
- [noip2015]神奇的幻方 题解
- NOIP2015 提高组 day1 神奇的幻方
- 洛谷 P2615 [NOIP2015 D1T1] 神奇的幻方
- Noip2015提高组Day1 “神奇的幻方”题解
- 【NOIP2015提高组Day1】 神奇的幻方
- NOIP2015 提高组 day1 神奇的幻方
- NOIP2015 提高组 复赛 day1 magic 神奇的幻方
- NOIP2015神奇的幻方(洛谷2615)
- 洛谷P2615 神奇的幻方(NOIp2015)
- JZOJsenior4323.【NOIP2015提高组Day1】神奇的幻方
- 2016/08/20 继承练习题(2)
- Ignatius and the Princess III(n的m划分)
- 【入门】矩阵乘法
- windows编程(消息机制、消息队列、消息映射、线程同步)笔记windows编程(消息机制、消息队列、消息映射、线程同步)笔记
- Linux Kernel 编译
- 【NOIP2015】神奇的幻方
- Python
- linux proc文件系统-属性文件使用之读写
- 关于NGUI的UILabel描边不理想的解决方案
- Android控件架构
- 软件升级的方法和装置
- 11g r2 删除节点操作
- pyqt4文档阅读(3):QLCDNumber
- 业余草站长告诉你:网站被克隆了怎么办?