站外题求调WA玄关
  • 板块题目总版
  • 楼主Luogu_Wangzhi
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/11 22:35
  • 上次更新2024/12/12 17:18:53
查看原帖
站外题求调WA玄关
1305886
Luogu_Wangzhi楼主2024/12/11 22:35

幻方是一个很神奇的NNN*N矩阵,它的每行、每列与对角线,加起来的数字和都是相同的。 我们可以通过以下方法构建一个幻方。(阶数为奇数)

1.第一个数字写在第一行的中间

2.下一个数字,都写在上一个数字的右上方:

a.如果该数字在第一行,则下一个数字写在最后一行,列数为该数字的右一列

b.如果该数字在最后一列,则下一个数字写在第一列,行数为该数字的上一行

c.如果该数字在右上角,或者该数字的右上方已有数字,则下一个数字写在该数字的下方

输入

一个数字NN<=20N(N<=20)

输出

按上方法构造的(2N1)(2N1)(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

WA代码(?:

#include<bits/stdc++.h>
using namespace std;
int a[100][100];
int main(){
	int n;
	cin>>n;
	n=2*n-1;
	int q=1;
	int f=0;
	a[1][n/2+1]=1;
	int i=1,j=n/2;//i为横向(行),j为竖向(列) 
	for(;;++q){
		if(f==n*n){
			break;
		}
		if(i==1){
			i=n;
			j++;
			a[i][j]=q;
		}
		else if(j==n){
			j=1;
			i--;
			a[i][j]=q;
		}
		else if(i==n&&j==n){
			i++;
			a[i][j]=q;
		}
		else if(a[i-1][j+1]!=0){
			j++;
			a[i][j]=q;
		}
		else{
			i--;
			j++;
			a[i][j]=q;
		}
		f++;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<a[i][j]<<' ';
		}
		cout<<endl;
	}
}
2024/12/11 22:35
加载中...