#include<iostream>
using namespace std;
int a[15][15];//全局变量,主函数和自定义的函数都可以使用。
//构造幻方
void gouzao(int n){
for(int j=0;j<n;j++)
for(int i=0;i<n;i++)
a[j][i]=0;
int i=1,row=0,col=n/2,row1,col1;
while(i<=n*n)
{
row1=row;col1=col;//记录初始位置,为后面“位置已经有其他数”而引入的
a[row][col]=i++;
row=row-1;col=col+1;//按照题目的要求
if(row<0) row=n-1;//按照题目的要求
if(col==n) col=0;//同理,按照题目的要求
if(a[row][col]!=0)//此步的意思为行列变换后的该处的值不为0,即该位置已经有了其他的值
{
row=row1+1;
col=col1;
}
}
}
//输出幻方
void shuchu(int n)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
printf("%5d",a[i][j]);//可以用cout<<stew(5)<<a[i][j];
if(j==n-1)printf("\n");//可以用cout<<"\n"; 另外,貌似c++里的endl和“\n”是不等价的,有兴趣的可以验证下,错了的话麻烦提醒我。
}
}
int main()
{
int n;
scanf("%d",&n);//可以用cin>>n;
gouzao(n);
shuchu(n);
return 0;
}
//总之,一道中等题,对于初学者可能会有点难度吧?但自己写个两三遍就能理解了,其实还是算简单题……
中国地质大学(北京),程序设计练习题“幻方”。
最新推荐文章于 2024-01-04 16:56:38 发布