题解 CF1436B 【Prime Square】

CF1436B
对于一个 (n) 阶方阵,我们发现:

当 $ n$ 为偶数时,对角线元素为 (1) ,其他元素为 (0) 时,可以保证每一行每一列的和都是 (2),满足题意。

(n) 为奇数时,则需要在以上构造的基础上在中心元素所在的行列填一个 (1),使得中心元素所在的行列和为 (2),而加入新元素的行列的和为 (2)(3),仍然满足题意。

(n=4left[ egin{matrix} 1 & 0 & 0 & 1\ 0 & 1 & 1 & 0 \ 0 & 1 & 1 & 0 \ 1 & 0 & 0 & 1end{matrix} ight])

(n=5left[ egin{matrix} 1 & 0 &1 & 0 & 1\ 0 & 1 & 0 & 1 & 0 \ 1 & 0 & 1 & 0 & 0 \ 0 & 1 & 0 & 1 & 0\ 1 & 0 & 0 & 0 & 1 \end{matrix} ight])

//AC代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 101
using namespace std;
int T,a[N][N],n;
int main()
{
	scanf("%d",&T);
	while(T--){
		memset(a,0,sizeof a);//别忘了清数组
		scanf("%d",&n);
		if(n==2){
			printf("%d %d
%d %d
",1,1,1,1); 
			continue;
		}
		for(int i=1;i<=n;++i)a[i][i]=1;
		for(int i=n,j=1;i>=1,j<=n;--i,++j)a[i][j]=1;
		if(n%2==1)a[1][n/2+1]=1,a[n/2+1][1]=1;
		for(int i=1;i<=n;++i){
			for(int j=1;j<=n;++j)printf("%d ",a[i][j]);
			printf("
");
		}
		
	}
	return 0;
}
原文地址:https://www.cnblogs.com/Wuhen-GSL/p/13872290.html