题解 | 坐标移动

坐标移动

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. 逐条判断指令是否合法

判断规则:

  1. 长度必须是 2 或 3(如 A2、D15)
  2. 第一个字符必须是 W/A/S/D 其中一个
  3. 后面的字符必须是数字

4. 解析步数 + 移动坐标

把字符形式的数字(如 `'1','5')转成真正的整数 15,

再根据方向修改 x、y 的值:

  • W → y + 步数
  • S → y - 步数
  • D → x + 步数
  • A → x - 步数

最后输出 x,y

全部评论

相关推荐

代码飞升AL:同学院本建议你换一个项目 就算你不去特意搜也应该知道点评不能写吧 保持投递不要停 然后快速弄一个项目换上去 公司就别挑了 我第一段120一天 快速跳就行
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务