洛谷P1815 蠕虫游戏
这个题就是个大模拟,个人感觉关键在于搞定尾巴
第一次做竟然全都输出了第一步撞到自己
#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;
}
查看22道真题和解析
文远知行公司福利 516人发布