题解 | 坐标移动
坐标移动
https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29
#include <stdio.h>
#include <string.h>
int main() {
char s[10000]={0};
scanf("%s",s);
char s1[strlen(s)][strlen(s)];
int x=0,y=0,i=0,j=0,m=0;
for(i=0;i<strlen(s);i++){
if(s[i]!=';'){
s1[j][m]=s[i];
m++;
}
else{
m=0;
j++;
}
}
for(m=0;m<j;m++){
if(strlen(s1[m])>0 && strlen(s1[m])<4 && (s1[m][0]=='A'||s1[m][0]=='D'||s1[m][0]=='W'||s1[m][0]=='S')){
if(s1[m][1]>='0'&&s1[m][1]<='9'){
int num=0;
if(s1[m][2]>='0'&&s1[m][2]<='9')
num=(s1[m][1]-'0')*10+(s1[m][2]-'0');
else if(!s1[m][2])
num=s1[m][1]-'0';
switch(s1[m][0]){
case 'A':{
x-=num;
break;
}
case 'D':{
x+=num;
break;
}
case 'W':{
y+=num;
break;
}
case 'S':{
y-=num;
break;
}
}
}
}
}
printf("%d,%d",x,y);
/*for(int t=0;t<j;t++){
printf("%s\n",s1[t]);
}*/
return 0;
}
整体解题思路(4 大步)
1. 读取输入字符串
把一整串指令读到字符数组 s 里。
2. 按分号;拆分每条指令
把长字符串切成一条条独立指令,存到二维数组 s1 中。
3. 逐条判断指令是否合法
判断规则:
- 长度必须是 2 或 3(如 A2、D15)
- 第一个字符必须是 W/A/S/D 其中一个
- 后面的字符必须是数字
4. 解析步数 + 移动坐标
把字符形式的数字(如 `'1','5')转成真正的整数 15,
再根据方向修改 x、y 的值:
- W → y + 步数
- S → y - 步数
- D → x + 步数
- A → x - 步数
最后输出 x,y。
查看20道真题和解析