题解 | #坐标移动#
坐标移动
http://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
纯模拟,双指针,逐个判断。
#include<stdio.h> #include<string.h> //检查每一次的输入是否正确,不正确返回-1,正确则返回移动的距离。 int check(char *s,int left,int right){ int value = 0; int len = right - left; //输入长度是否合法 if(len > 3 || len < 2) return -1; //第一个字符是否合法 switch(s[left]){ case 'A': case 'S': case 'W': case 'D': //数字字符是否合法 if(len==2){ if(s[left+1]<'0'||s[left+1]>'9') return -1; else return s[left+1] - '0'; } else{ if(s[left+1]<'0'||s[left+1]>'9') return -1; if(s[left+2]<'0'||s[left+2]>'9') return -1; //两位数的距离。 return (s[left+1] - '0')*10 + s[left+2] - '0'; } default:return -1; } return value; } int main(){ char s[10001] = {0}; scanf("%s\n",s); int x = 0; int y = 0; //双指针限制每次的输入,left指向起点,right指向每个分号。 int left = 0; int right = 0; int len = strlen(s); for(int i = 0; i < len; i++){ int temp = 0; if(s[i]==';'){ right = i; temp = check(s, left, right); //如果移动距离合法,则根据情况修改坐标。 if(temp!=-1){ switch(s[left]){ case 'A':x = x - temp;break; case 'S':y = y - temp;break; case 'W':y = y + temp;break; case 'D':x = x + temp;break; } } //left移动到下一个输入的起点 left = right+1; } } printf("%d,%d",x,y); return 0; }