题解 CF1436B 【Prime Square】

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

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

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

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

\(n=5\left[ \begin{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} \right]\)

//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\n%d %d\n",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("\n");
		}
		
	}
	return 0;
}
posted @ 2020-10-25 09:31  Wuhen_GSL  阅读(97)  评论(0)    收藏  举报