您的位置:首页 > 其它

22:神奇的幻方

2017-03-03 16:58 197 查看

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;
int a[1001][1001];
int now=1;
int tot=0;
int hang,lie;
int main()
{
int n;
cin>>n;
int c=2*n-1;
while(tot!=(c*c))
{
if(tot==0)
{
a[1][c/2+1]=now;
now++;
hang=1;
lie=c/2+1;
tot++;
}
else if(hang==1&&lie!=c)
{
a[c][lie+1]=now;
now++;
tot++;
hang=c;
lie=lie+1;
}
else if(lie==c&&hang!=1)
{
a[hang-1][1]=now;
now++;
tot++;
hang=hang-1;
lie=1;
}
else if((hang==1&&lie==c)||(a[hang-1][lie+1]!=0))
{
a[hang+1][lie]=now;
now++;
tot++;
hang=hang+1;
}
else
{
a[hang-1][lie+1]=now;
now++;
tot++;
hang=hang-1;
lie=lie+1;
}
}
for(int i=1;i<=c;i++)
{
for(int j=1;j<=c;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}


模拟。,,,,,,,,,,,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: