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