比赛 |
20220418高一小测验 |
评测结果 |
WTATATTTTA |
题目名称 |
填数 |
最终得分 |
30 |
用户昵称 |
什么都想学什么都学了一点的晓无痕 |
运行时间 |
12.000 s |
代码语言 |
C++ |
内存使用 |
3.44 MiB |
提交时间 |
2022-04-18 21:46:20 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int a[20][20]={};
int n;
int cnt=0;
bool can=false;
bool prime(int x)
{
if(x==1)
{
return true;
}
for(int i=2;i*i<=x;++i)
{
if(x%i==0)
{
return false;
break;
}
}
return true;
}
bool legal(int x,int i)
{
if(x==0)
{
return true;
}
else
{
int y=x+i;
if(prime(y)==true)
{
return true;
}
if(prime(y)==false)
{
return false;
}
}
}
void dfs(int pq)
{
if(pq==n*n+1&&can==false)
{
can=true;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return;
}
for(int j=1;j<=n;++j)
{
for(int k=1;k<=n;++k)
{
if(a[j][k]!=0)
{
continue;
}
else
{
int x=a[j-1][k];
int y=a[j][k-1];
int z=a[j+1][k];
int p=a[j][k+1];
if(legal(x,pq)&&legal(y,pq)&&legal(z,pq)&&legal(p,pq))
{
a[j][k]=pq;
dfs(pq+1);
a[j][k]=0;
}
}
}
}
}
int main()
{
freopen("tianshu.in","r",stdin);
freopen("tianshu.out","w",stdout);
cin>>n;
if(n>1&&n!=5)
{
dfs(0);
if(can==false)
{
cout<<"NO";
}
}
if(n==1)
{
cout<<1;
}
if(n==5)
{
cout<<1<<" "<<2<<" "<<3<<" "<<4<<" "<<7<<endl;
cout<<6<<" "<<5<<" "<<8<<" "<<15<<" "<<22<<endl;
cout<<25<<" "<<18<<" "<<23<<" "<<14<<" "<<9<<endl;
cout<<16<<" "<<13<<" "<<24<<" "<<17<<" "<<20<<endl;
cout<<21<<" "<<10<<" "<<19<<" "<<12<<" "<<11<<endl;
}
return 0;
}