C/C++教程

SYCOJ1018神奇的幻方

本文主要是介绍SYCOJ1018神奇的幻方,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目—神奇的幻方 (shiyancang.cn)

模拟就对了 

因为每一个状态由前一个状态决定,所以只需要记录即可

#include<bits/stdc++.h>
using namespace std;
const int N=52;
int k[N][N],n,pre1,pre2; 
int main()
{
	scanf("%d",&n);
	k[1][(n+1)/2]=1,pre1=1,pre2=(n+1)/2;
	for(int i=2;i<=n*n;i++)
	{
		if(pre1==1&&pre2!=n) k[n][pre2+1]=i,pre1=n,pre2=pre2+1;
		else if(pre2==n&&pre1!=1) k[pre1-1][1]=i,pre1=pre1-1,pre2=1;
		else if(pre1==1&&pre2==n) k[pre1+1][pre2]=i,pre1+=1,pre2=pre2;
		else if(pre1!=1&&pre2!=n) 
		{
			if(!k[pre1-1][pre2+1]) k[pre1-1][pre2+1]=i,pre1=pre1-1,pre2=pre2+1;
			else k[pre1+1][pre2]=i,pre1+=1,pre2=pre2;
		}	
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cout<<k[i][j]<<(j==n?'\n':' '); 
	return 0;
}

  

这篇关于SYCOJ1018神奇的幻方的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!