百练 神奇的幻方(二维数组水题)
2017-08-26 14:50
183 查看
神奇的幻方
查看提交统计提问总时间限制: 1000ms 内存限制: 65535kB描述幻方是一个很神奇的N*N矩阵,它的每行、每列与对角线,加起来的数字和都是相同的。我们可以通过以下方法构建一个幻方。(阶数为奇数)1.第一个数字写在第一行的中间2.下一个数字,都写在上一个数字的右上方: a.如果该数字在第一行,则下一个数字写在最后一行,列数为该数字的右一列 b.如果该数字在最后一列,则下一个数字写在第一列,行数为该数字的上一行 c.如果该数字在右上角,或者该数字的右上方已有数字,则下一个数字写在该数字的下方输入一个数字N(N<=20)输出按上方法构造的2N-1 * 2N-1的幻方样例输入3样例输出
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
#include<iostream>#include<cstring>using namespace std;int n;int mp[200][200];int cnt;int main(){cin>>n;int x,y,nx,ny;x=0;y=(2*n-1)/2;mp[x][y]=++cnt;while(true){if(cnt==(2*n-1)*(2*n-1))break;int ny=(y+1)%(2*n-1);if(x==0)nx=2*n-2;else nx=x-1;if(x==0&&y==2*n-2){nx=1;ny=2*n-2;mp[nx][ny]=++cnt;}else if(mp[nx][ny]){nx=(x+1)%(2*n-1);ny=y;mp[nx][ny]=++cnt;}else mp[nx][ny]=++cnt;x=nx;y=ny;}for(int i=0;i<(2*n-1);i++){for(int j=0;j<(2*n-1);j++){if(j==0)cout<<mp[i][j];else cout<<" "<<mp[i][j];}cout<<endl;}return 0;}
相关文章推荐
- 二维数组练习22_神奇的幻方
- NOIP2015 神奇的幻方 解题报告(水题模拟)
- 洛谷 P2615 神奇的幻方
- [NOIP 2015] Day.1 T1 神奇的幻方 [模拟]
- 神奇的幻方
- 洛谷-神奇的幻方-NOIP2015提高组复赛
- [NOIP2015] 神奇的幻方 D1 T1
- ytu 1050:写一个函数,使给定的一个二维数组(3×3)转置,即行列互换(水题)
- 22:神奇的幻方
- P2615 神奇的幻方
- 【神奇的技巧】leetcode - 661. Image Smoother【整数位信息使用 + 二维数组边界考虑 + 数组的巧妙使用】
- NOIP2015提高组 神奇的幻方
- 【NOIP2015】神奇的幻方
- Noip 2015 D1T1 神奇的幻方
- 二维数组的神奇用法(杭电1004)
- 洛谷——P2615 神奇的幻方 【Noip2015 day1t1】
- 【NOIP2015提高组Day1】 神奇的幻方
- NOIP 2015 提高组 Day1 神奇的幻方
- 22:神奇的幻方
- NOIP2015 提高组 day1 神奇的幻方