題解 CF1436B 【Prime Square】
阿新 • • 發佈:2020-10-25
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; }