一个很易懂的题解
2024-09-20 17:11:30
发布于:江苏
11阅读
0回复
0点赞
这道题怎么说呢,首先思维难度肯定是有的,所以在我看来这题无论是从代码量来看还是从其他方面,这题他如果改一下,都是一个普及-的难度,觉的简单的可以去做一下素数方阵这题,如果ACGO里没有的话,可以去洛谷里找(B3738 [信息与未来 2018] 素数方阵)
#include<bits/stdc++.h>
using namespace std;
bool check(int x1,int y1);
int n,a[109][109],f=0,x=1,y=1;
const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int main(){
scanf("%d",&n);
for(int i=1;i<=n*n;i++){
a[x][y]=i;
if(n*n==i)break;
if(!check(x+dir[f][0],y+dir[f][1]))f=(f+1)%4;
x+=dir[f][0],y+=dir[f][1];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
bool check(int x1,int y1){
return (x1>=1&&x1<=n&&y1>=1&&y1<=n&&!a[x1][y1])?true:false;
}
全部评论 1
贴一下题解里题目的题解
#include<bits/stdc++.h> using namespace std; const int dirs[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int n,row,col,a[100][100],x=1,y=1,f=0,tmp=0; bool prime(int a){ if(a==0||a==1)return false; for(int i=2;i*i<=a;i++){ if(a%i==0) return false; } return true; } bool check(int x1,int y1){ return (x1>=1&&x1<=n&&y1>=1&&y1<=n&&!a[x1][y1])?true:false; } int main(){ scanf("%d %d %d",&n,&row,&col); for(int i=1;;i++){ if(prime(i)){ a[x][y]=i; tmp++; } else continue; if(tmp==n*n)break; if(!check(x+dirs[f][0],y+dirs[f][1]))f=(f+1)%4; x+=dirs[f][0]; y+=dirs[f][1]; } /*for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) cout<<a[i][j]<<" "; puts(" "); }*/ cout<<a[row][col]; return 0; }
来源:江苏省选
2024-09-20 来自 江苏
0
有帮助,赞一个