这个题就是个大模拟,个人感觉关键在于搞定尾巴
第一次做竟然全都输出了第一步撞到自己
#include<bits/stdc++.h> using namespace std; char a[101]; int dis[4][2]={{0,1},{0,-1},{1,0},{-1,0}},d[200][3],n,i,j,err,t,w,f,nx,ny,m; int main() { //freopen("worm.in","r",stdin); //freopen("worm.out","w",stdout); scanf("%d",&n); while(n>0) { scanf("%s",a); d[1][1]=25; d[1][2]=11; err=0; for(i=2;i<=20;i++) { d[i][1]=25; d[i][2]=i+10; } t=20;w=1; for(i=0;i<n;i++) { switch(a[i]) { case 'E':f=0;break; case 'W':f=1;break; case 'S':f=2;break; case 'N':f=3;break; } nx=d[t][1]+dis[f][0]; ny=d[t][2]+dis[f][1]; if(nx<=0||nx>50||ny<=0||ny>50) { err=1; m=i+1; break; } w++; for(j=w;j<=t-1;j++) if(d[j][1]==nx&&d[j][2]==ny) { err=2; m=i+1; break; } if(err==2) break; d[++t][1]=nx; d[t][2]=ny; } if(err==0) printf("The worm successfully made all %d moves.\n",n); if(err==1) printf("The worm ran off the board on move %d.\n",m); if(err==2) printf("The worm ran into itself on move %d.\n",m); scanf("%d",&n); } //fclose(stdin); //fclose(stdout); return 0; }