22:神奇的幻方

2018-06-17 23:13:46来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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


 1 #include<iostream>
 2 using namespace std;
 3 int a[1001][1001];
 4 int now=1;
 5 int tot=0;
 6 int hang,lie;
 7 int main() 
 8 {
 9     int n;
10     cin>>n;
11     int c=2*n-1;
12     while(tot!=(c*c))
13     {
14         if(tot==0)
15         {
16             a[1][c/2+1]=now;
17             now++;
18             hang=1;
19             lie=c/2+1;
20             tot++;
21         }
22         else if(hang==1&&lie!=c)
23         {
24             a[c][lie+1]=now;
25             now++;
26             tot++;
27             hang=c;
28             lie=lie+1;
29         }
30         else if(lie==c&&hang!=1)
31         {
32             a[hang-1][1]=now;
33             now++;
34             tot++;
35             hang=hang-1;
36             lie=1;
37         }
38         else if((hang==1&&lie==c)||(a[hang-1][lie+1]!=0))
39         {
40             a[hang+1][lie]=now;
41             now++;
42             tot++;
43             hang=hang+1;
44         }
45         else 
46         {
47             a[hang-1][lie+1]=now;
48             now++;
49             tot++;
50             hang=hang-1;
51             lie=lie+1;
52         }
53     }
54     for(int i=1;i<=c;i++)
55     {
56         for(int j=1;j<=c;j++)
57         {
58             cout<<a[i][j]<<" ";
59         }
60         cout<<endl;
61     }
62     return 0;
63 }

模拟。,,,,,,,,,,,

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:《C++ Primer》学习笔记:迭代器介绍

下一篇:01:数制转换