您的位置:首页 > 编程语言 > C语言/C++

神奇的幻方

2017-02-18 20:01 232 查看

神奇的幻方

学长说要把博客当错题本,好吧,今天确实考试了,QAQ…

考的NOIP2015Day1的题,还比较简单,模拟就可以满分。对他们一定是拼手速的题吧。。。

自己写的代码片如下:

#include<iostream>
#include<cstdio>
using namespace std;
int N,k;
int a[100][100];
int b[3000][3];
int main()
{
freopen("magic.in","r",stdin);
freopen("magic.out","w",stdout);
k=1;
scanf("%d",&N);
if(N==1) printf("1");
else{
a[1][N/2+1]=k;
++k;
b[1][1]=1;b[1][2]=N/2+1;
while(k<=N*N)
{
if(b[k-1][1]==1&&b[k-1][2]!=N)
{
a
[b[k-1][2]+1]=k;
b[k][1]=N;
b[k][2]=b[k-1][2]+1;
++k;
}
else if(b[k-1][1]!=1&&b[k-1][2]==N)
{
a[b[k-1][1]-1][1]=k;
b[k][1]=b[k-1][1]-1;
b[k][2]=1;
++k;
}
else if(b[k-1][1]==1&&b[k-1][2]==N)
{
a[b[k-1][1]+1][b[k-1][2]]=k;
b[k][1]=b[k-1][1]+1;
b[k][2]=b[k-1][2];
++k;
}
else if(b[k-1][1]!=1&&b[k-1][2]!=N)
{
if(a[b[k-1][1]-1][b[k-1][2]+1]==0)
{
a[b[k-1][1]-1][b[k-1][2]+1]=k;
b[k][1]=b[k-1][1]-1;
b[k][2]=b[k-1][2]+1;
++k;
}
else
{
a[b[k-1][1]+1][b[k-1][2]]=k;
b[k][1]=b[k-1][1]+1;
b[k][2]=b[k-1][2];
++k;
}
}
}
for(int i=1;i<=N;++i)
{
for(int j=1;j<=N;++j)
printf("%d ",a[i][j]);
printf("\n");
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 模拟