题解 | #坐标移动#

坐标移动

https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int move_coord(char *MOVE,int count)
{
    if((MOVE[1] < '0' || MOVE[1] > '9') ||
       (MOVE[2] < '0' || MOVE[2] > '9'))
        return 0;
    else
    {
        if(count == 2)//只记录了个位数
        {
            return (MOVE[1] - '0');
        }
        else if(count == 3)//记录了两位数
        {
            return (MOVE[1] - '0') *10 + (MOVE[2] - '0');
        }
        else {
            return 0;
        }           
    }
}

void moveStep(int *POSXY, char *MOVE, int count)
{
    if(count > 3)
    {
        return;
    }
    switch(MOVE[0])
    {
        case 'W':
            POSXY[1] += move_coord(MOVE, count);
            break;
        case 'S':
            POSXY[1] -= move_coord(MOVE, count);
            break;
        case 'A':
            POSXY[0] -= move_coord(MOVE, count);
            break;
        case 'D':
            POSXY[0] += move_coord(MOVE, count);
            break;
        default: break;
    }
    return;
}

int main()
{
    char str[10001];
    int POSXY[2]={0,0};
    char MOVE[3];//方向+十分位+个位
    int count = 0;//记录操作符的位数
    
    gets(str);
    int len = strlen(str);
 
    for(int i=0;i<len;i++)
    {
        if(str[i] == ';')//找到';'就开启新的MOVE记录
        {
            moveStep(POSXY,MOVE,count);
            count = 0;
            continue;//避免';'被写进MOVE[0]
        }
        if(count < 3)//超过3位不做记录
        {
            MOVE[count++] = str[i];
        }
    }
    printf("%d,%d",POSXY[0],POSXY[1]);
    return 0;
}

全部评论

相关推荐

之前自己不懂事,投了字节,基本是自己第一次面试,一面就挂了
观水:前几天有个学化学的做前端,加上实习面了22次字节最后成功了
点赞 评论 收藏
分享
2025-12-14 11:43
黑龙江大学 Java
用微笑面对困难:确实比较烂,可以这么修改:加上大学的qs排名,然后大学简介要写一些,然后硕士大学加大加粗,科研经历第一句话都写上在复旦大学时,主要负责xxxx,简历左上角把学校logo写上,建议用复旦大学的简历模板
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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