/*写一个程序将十进制数转变为十六进制输出,每行输入一个十进制数,当输入数为0,程序结束
#include<cstdio>
char wei[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char hex[20];//字符数组存储最终结果 ,逆序输出
//除基取余倒级联
int decToHex(int n){
int hex_wei=0;
int temp;
do{
temp=n%16;//取余数
n=n/16;
hex[hex_wei++]=wei[temp];
}while(n!=0);
return hex_wei;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF,n){
int hex_wei=decToHex(n);
for(int i=hex_wei-1;i>=0;i--){
printf("%c",hex[i]);
}
}
return 0;
}
*/
/*贪吃蛇:,只有头和尾移动,注意头能移动到刚刚尾巴移动空出的空格处,头除了次头所在位置方向
不能移动之外,其余三个方向都能移动,撞到自己或者板子都会死亡
给出一系列移动步骤,判断会死亡还是自由航行
初始在蛇尾(25,11)和蛇头(25,30)的水平线位置长20,蛇在运动时,只需要改变蛇头和蛇尾两个位置即可
即蛇头移动一个位置之后,将蛇尾放到蛇头原来的位置,然后最后一个是蛇尾,
13
SWWWWWWWWWNEE
18
NWWWWWWWWWWSESSSWS
30
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
#include<cstdio>
#include<cstring>
//需要用一个数组记录蛇身每个位置
struct snake{
int x,y;
}s[20];//蛇长20
int main(){
int n;//n为蛇移动步数
char str[100];
while(scanf("%d",&n)!=EOF,n){//输入n=0结束
for(int i=0;i<20;i++){//s[0]蛇尾,s[19]蛇头 ,初始化位置
s[i].x=25;
s[i].y=11+i;
}
gets(str);//输入一个字符串
int len=strlen(str);
//先判断蛇头下一次移动会成功还是撞墙等,若成功再移动蛇其他位置
int k;
for(k=0;k<len;k++){
//先让蛇头移动,在判断
int headx=s[19].x ;//为了不改变s[19]蛇头的位置值,后面更新蛇身位置用到
int heady=s[19].y;
// printf("%d %d\n",headx,heady);
switch(str[k]){
case 'N':headx=headx-1;break;//蛇头向上移动
case 'S':headx=headx+1;break;
case 'E':heady=heady+1;break;//往东往右
case 'W':heady=heady-1;break;
}
// printf("%d %d\n",headx,heady);
//只需要判断蛇头的情况即可
if(headx<1 || headx>50 || heady<1 || heady>50){//蛇头撞墙
printf("The worm ran off the board on move %d\n",k+1);
break;//跳出外层的for循环即结束字符判断
}
bool cflag=0;
for(int j=19;j>0;j--){//除了蛇尾0不需要判断,其余位置需要判断
if(headx ==s[j].x && heady==s[j].y){
printf("The worm ran into itself on move %d\n",k+1);
// printf("%d %d",s[j].x,s[j].y);
cflag=1;
break;
}
}
if(cflag==1) break;//跳出最外层的for循环
//可以,移动剩下的身子
for(int j=0;j<19;j++){//
s[j].x=s[j+1].x;
s[j].y=s[j+1].y;
}
s[19].x=headx;
s[19].y=heady;
}
if(k==n){
printf("The worm successfuly made all %d moves\n",n);
}
}
return 0;
}
*/