二维数组练习22_神奇的幻方
2017-08-31 15:31
417 查看
/* Name: Copyright: Author: Date: 31-08-17 14:27 Description: 22_神奇的幻方 查看 提交 统计 提问 总时间限制: 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> using namespace std; const int M = 40; const int N = 40; int A [M]; int main() { int n, r, c, s=1; cin >> n; n = 2 * n - 1; r = 0; c = n / 2; A[r][c] = s++; while (s <= n*n) { if ((r == 0 && c == n-1) || (r>0 && c<n-1 && A[r-1][c+1] != 0))//右上角 { r = r + 1; A[r][c] = s++; } else if (r == 0 && c < n-1) //第一行且非最后列 { r = n -1; c = c + 1; A[r][c] = s++; } else if (c == n-1)//最后一列 { r = r -1; c = 0; A[r][c] = s++; } else { r = r -1; c = c + 1; A[r][c] = s++; } } for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { cout << A[i][j] << " "; } cout << endl; } return 0; }
相关文章推荐
- 百练 神奇的幻方(二维数组水题)
- 百练noi 22:神奇的幻方
- openjudge 数算练习 线性表 0217:神奇的幻方
- 22:神奇的幻方/NOI / 1.8编程基础之多维数组
- OPENJUDGE 1.8 22:神奇的幻方
- 22:神奇的幻方
- 22:神奇的幻方
- 22:神奇的幻方
- NOIP 2015 提高组 Day1 T1 神奇的幻方
- 9_22练习
- 【十】二维数组的转置(思路及练习)
- acm-sdut-深度优先搜索练习之神奇的矩环
- 2015 NOIP day1 t1 神奇的幻方 模拟
- [SDUT](3468)广度优先搜索练习之神奇的电梯 ---BFS(图)
- C++&Pascal&Java——NOIP2015提高组day1 t1——神奇的幻方
- 二维数组练习13_图像模糊处理
- 神奇的C语言三:二维数组与二级指针
- 【C语言】练习1-22
- 二维数组基础练习1
- 数据结构练习(22)调整数组顺序使奇数位于偶数前面