题目大意:整个游戏棋盘是50*50大小的,左上角在(1,1),贪吃蛇由20个节点组成,头部位置在(25,30),水平延展到(25,11),可以有四个运动方向:东,西,南,北。题目就是给你一个运动序列,判断最终结果是下面3种情况的哪一种:1)正常。2)头撞到自己身体。3)出界。
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->#include<iostream>
#include<string>
usingnamespacestd;
//贪吃蛇节点
structWNode
{
intx;//行号
inty;//列号
};
intmain()
{
stringmoves;//移动序列
WNodeworm[20];//贪吃蛇
intn,i,j;
while(cin>>n&&n!=0)
{
//从头部到尾部初始化贪吃蛇
for(i=0;i<20;++i)
{
worm[i].x=25;//起始行在行
worm[i].y=30-i;//起始所在列
}
cin>>moves;//输入移动序列
for(i=0;i<n;++i)
{
//贪吃蛇中其他节点移动到前一个节点位置上
for(j=19;j>0;--j)
{
worm[j].x=worm[j-1].x;
worm[j].y=worm[j-1].y;
}
//移动头部
if(moves[i]=='N')
{//向北
worm[0].x-=1;
}
elseif(moves[i]=='S')
{//向南
worm[0].x+=1;
}
elseif(moves[i]=='W')
{//向西
worm[0].y-=1;
}
elseif(moves[i]=='E')
{//向东
worm[0].y+=1;
}
//判断是否出界
if(worm[0].x>50||worm[0].y>50||worm[0].x<1||worm[0].y<1)
{
cout<<"Thewormranofftheboardonmove"<<i+1<<"."<<endl;
break;
}
//判断是否撞到自己身体了
for(j=1;j<20;++j)
{
//头部节点撞到其他节点
if(worm[0].x==worm[j].x&&worm[0].y==worm[j].y)
{
cout<<"Thewormranintoitselfonmove"<<i+1<<"."<<endl;
break;
}
}
if(j!=20)break;//发生了碰撞,不能继续运动了
}
if(i==n)
cout<<"Thewormsuccessfullymadeall"<<n<<"moves."<<endl;
}
return0;
}
分享到:
相关推荐
zoj 2499 The Happy Worm.md
zoj 1255 The Path.md
zoj 1810 The Gourmet Club.md
zoj 2151 The Highest Profits.md
ZOJ解题报告ZOJ解题报告ZOJ解题报告ZOJ解题报告
zoj 1610 Count the Colors.md
zoj题目简单归类zoj题目简单归类zoj题目简单归类
acm中zoj1002的可运行C++程序
包含了zoj700多道题目的源代码,在做题时可以参考
Problem Arrangement zoj 3777
ZOJ题目答案源码
一个非常非常非常非常实用的zoj结题代码
学习ACM程序设计的朋友一定要看,这是训练必备的POJ ZOJ题目分类及解题思路
The reason is that when the director chooses the words from the dictionary and encrypts them, he never changes their order (the words in the dictionary are lexicographically sorted). String a1a2 ... ...
zoj 1003 c语言的,要写这么多描述吗。。
ZOJ1805代码
本代码是zoj上AC的1951的代码,把双重循环简化为O(n),不过素数判断的改进还不够
浙大ZOJ题目分类,可以让你更方便快速锁定那你想要联系的题目,是自己快速提高·
zoj1027解题指南和代码,还不错,是学校培训给的。
ZOJ题解集合-截至2835。共1244个文件,C/C++,有重复