求解,为什么只过第三个测试点?
查看原帖
求解,为什么只过第三个测试点?
810657
Ls_Nora楼主2024/4/30 22:20
#include<bits/stdc++.h>

using namespace std;

typedef pair<int,int> pii;

const int N=50;
int n,a[N][N];//记录幻方
pii g[N*N]; //记录数字i在数组位置

int main(){
	cin>>n;
	int u=(n+1)/2;
	a[1][u]=1; 
	g[1]={1,u};
	for(int i=2;i<=n*n;i++){
    //记录上一数字行、列位置
		int h=g[i-1].first;
		int l=g[i-1].second;
		if(h==1){
			if(l==n) a[h-1][l]=i,g[i]={h-1,l};
			else a[n][l+1]=i,g[i]={n,l+1};
		}
		else{
			if(l==n) a[h-1][1]=i,g[i]={h-1,1};
			else {
				if(a[h-1][l+1]==0) a[h-1][l+1]=i,g[i]={h-1,l+1};
				else a[h+1][l]=i,g[i]={h+1,l};
			}
		}
	}
	//输出答案
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)
			cout<<a[i][j]<<" ";
		cout<<endl;
	}
	return 0;
} 
2024/4/30 22:20
加载中...