题解 | #坐标移动#

坐标移动

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;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-11 11:16
点赞 评论 收藏
分享
Gaynes:查看图片
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:10
直接上图
牛客13578115...:改得一般,不值80
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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