1. 程式人生 > 實用技巧 >題解 CF1436B 【Prime Square】

題解 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;
}