这题是稍微复杂一点的小模拟,细节有点多(本人比较烦此类题目,耗时较久,算是偏难的CSP-2了
我采用的解决办法是,将方向表示为状态,(感觉这种方法比较适合这类题)
其次,画状态转移图(包含状态转移条件和执行语句,这一步需要细心
然后,根据状态转移图快速编写好程序
最后,验证样例和特殊数据(一开始写了bug,n为1时运行错误只得了90分,警惕
状态转移图:
AC代码:
#include<bits/stdc++.h> using namespace std; #define ll long long const int N=5e2+10; int x,y,n; int a[N][N]; int main() { ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>n; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j]; x=0;y=0; int f=1; while(x!=n-1||y!=n-1) { cout<<a[x][y]<<' '; if(f==1) { y++; if(x==0) f=3; if(x==n-1) f=2; } else if(f==2) { x--;y++; if(y==n-1) f=4; if(x==0&&y!=n-1) f=1; if(x!=0&&y!=n-1) f=2; } else if(f==3) { x++;y--; if(x==n-1) f=1; if(x!=n-1&&y!=0) f=3; if(x!=n-1&&y==0)f=4; } else if(f==4) { x++; if(y==0) f=2; if(y==n-1) f=3; } } cout<<a[x][y]<<endl; return 0; }
如果大家有其他好的方法,欢迎提出和我探讨!~