我在这个网站上尝试了一些组合,发现 n ≤ 3 n \le 3 n≤3 时绝对无解。之后又测试了好几个,发现了几个答案,找到了规律。
我们设 i , i i,i i,i 是方阵的主对角线上的元素。当 n n n 是偶数时,我们只需要在 i − 1 , i i-1,i i−1,i 和 i , i − 1 i,i-1 i,i−1 上放细胞就行了;当 n n n 是奇数时,我们只需要在偶数的基础上在最左上角在放一个细胞。
下面是代码。
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int i,j,n;
bool a[1002][1002]={};//方阵
char ch[2]={'.','#'};
cin>>n;
if(n<=3)//无解
{
cout<<-1;
return 0;
}
for(i=2;i<=n/2+1;++i)//放置细胞
a[i-1][i]=a[i][i-1]=1;
if(n%2==1)a[1][1]=1;//n是奇数时再放一个
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
cout<<ch[a[i][j]];
cout<<'\n';
}
return 0;
}