题解 | #坐标移动#

坐标移动

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//遍历数组的暴力解法

int mypow(int a, int b) //自定义的乘积函数,pow函数不知道为什么不管用...
{
    int r = 1;
    for(int i=0;i<b;i++)
    {
        r *= a;
    }
    return r;
}

int L(char* arr) //用于判断并计算
{
    int len = 0;
    int flag = 0;
    int r = 0;
    len = strlen(arr);
    for(int i=1;i<len;i++)
    {
        if( (arr[i] >= '0')&&(arr[i] <= '9') )
            flag = 0;
        else
            flag = 1;
    }
    if(!flag)
    {
        for(int j=0;j<len-1;j++)
        {
            r += (arr[len-1-j]-48)*mypow(10,j); //减去48目的是字符转ASCII码
        }
        return r;
    }
    return 0;
}

int main(void)
{
    char rev[10001]; //定义接收字符串数组
    char buf[11]; //定义接收每两个分号之间的东西
    int x = 0;//定义x和y的坐标
    int y = 0;
    int length = 0; //定义接收字符串的有效字符长度
    int i = 0; //遍历接收数组的标号
    int j = 0; //控制buf数组的标号
    fgets(rev,sizeof(rev),stdin);
    length = strlen(rev)-1;
    rev[length] = '\0';

    while(rev[i] != '\0') //从前往后遍历接收数组
    {
        if(rev[i] != ';') //不是分号则将其赋予buf数组
        {
            buf[j] = rev[i];
            j++;
        }
        else
        {
            switch(buf[0]) //由于后面会清buf数组,且将buf的接收指针重置为,则每次只需判断buf的第一个字符
            {
                case 'A':  //根据逻辑进行控制x和y的变化
                    x -= L(buf);
                    break;
                case 'S':
                    y -= L(buf);
                    break;
                case 'D':
                    x += L(buf);
                    break;
                case 'W':
                    y += L(buf);
                    break;
                default:
                    break;
            }
            memset(buf,0,sizeof(buf));
            j=0;
        }
        i++;
    }
    
    printf("%d,%d",x,y);

	return 0;
}

全部评论

相关推荐

哈哈哈,你是老六:我去,这面试还要靠抢啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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