📄 1056.txt
字号:
#include<stdio.h>
#include<string.h>
#define N 101
int main()
{
char s[N];
int n,i,j,l,a[20][2],ah;
bool b[50][50];
while(1)
{
scanf("%d",&n);
if(n==0)break;
scanf("%s",s);
memset(b,0,sizeof(b));
for(i=10;i<30;i++)b[24][i]=1;
l=strlen(s);
ah=19;
for(i=0;i<20;i++){a[i][0]=24;a[i][1]=10+i;}
for(i=0;i<l;i++)
{
switch(s[i])
{
case 'E':
if(a[ah][1]>=49)
{printf("The worm ran off the board on move %d.\n",i+1);goto end;
}
if(b[a[ah][0]][a[ah][1]+1]&&(a[ah][0]!=a[(ah-19+20)%20][0]||a[ah][1]+1!=a[(ah-19+20)%20][1]))
{printf("The worm ran into itself on move %d.\n",i+1);goto end;}
j=ah;
ah=(ah+1)%20;a[ah][0]=a[j][0];a[ah][1]=a[j][1]+1;
break;
case 'W':
if(a[ah][1]==0)
{printf("The worm ran off the board on move %d.\n",i+1);goto end;
}
if(b[a[ah][0]][a[ah][1]-1]&&(a[ah][0]!=a[(ah-19+20)%20][0]||a[ah][1]-1!=a[(ah-19+20)%20][1]))
{printf("The worm ran into itself on move %d.\n",i+1);goto end;}
j=ah;
ah=(ah+1)%20;a[ah][0]=a[j][0];a[ah][1]=a[j][1]-1;
break;
case 'S':
if(a[ah][0]>=49)
{printf("The worm ran off the board on move %d.\n",i+1);goto end;
}
if(b[a[ah][0]+1][a[ah][1]]&&(a[ah][0]+1!=a[(ah-19+20)%20][0]||a[ah][1]!=a[(ah-19+20)%20][1]))
{printf("The worm ran into itself on move %d.\n",i+1);goto end;}
j=ah;
ah=(ah+1)%20;a[ah][0]=a[j][0]+1;a[ah][1]=a[j][1];
break;
case 'N':
if(a[ah][0]==0)
{printf("The worm ran off the board on move %d.\n",i+1);goto end;
}
if(b[a[ah][0]-1][a[ah][1]]&&(a[ah][0]-1!=a[(ah-19+20)%20][0]||a[ah][1]!=a[(ah-19+20)%20][1]))
{printf("The worm ran into itself on move %d.\n",i+1);goto end;}
j=ah;
ah=(ah+1)%20;a[ah][0]=a[j][0]-1;a[ah][1]=a[j][1];
break;
default:
break;
}
memset(b,0,sizeof(b));
for(j=0;j<20;j++)
b[a[(ah-j+20)%20][0]][a[(ah-j+20)%20][1]]=1;
}
printf("The worm successfully made all %d moves.\n",i);
end:
;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -