题解 | #坐标移动#

坐标移动

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

#include <iostream>
#include <vector>
using namespace std;
// 模拟题
char dir[4] = {'A', 'D', 'W', 'S'};
bool isValid(const std::string& str, int& num){
    // 小于或者等于1直接不合法
    if (str.size() <= 1) return false;
    int i = 0;
    for (; i < 4; ++i){
        if (str[0] - dir[i] == 0) break;
    }
    if (i == 4) return false;
    // 开始从数字位置判断,数字开头不允许为0
    if (str[1] == '0') return false;
    for (int j = 1; j < str.size(); ++j){
        if (str[j] < '0' || str[j] > '9') return false;
        num = num*10 + (str[j] - '0');
    }
    return true;

}


int main() {
    std::string str;
    std::vector<std::string> vec;
    std::vector<int> moveLen;
    std::cin >> str;
    int leftIndex = 0; 
    for (int i = 0; i < str.size(); ++i){
        if (str[i] != ';') continue;
        int num = 0;
        std::string tmp = str.substr(leftIndex, i - leftIndex);
        // std::cout << tmp << std::endl;
        if (isValid(tmp, num)){
            vec.push_back(tmp);
            moveLen.push_back(num);
        }
        leftIndex = i+1;
    }
    // std::cout << leftIndex << std::endl;
    // for (int i = 0; i < vec.size(); ++i){
    //     std::cout << vec[i] << std::endl;
    // }
    int center[1][2] = {0, 0};
    for (int i = 0; i < vec.size(); ++i){
        if (vec[i][0] == 'A'){
            center[0][0] -= moveLen[i];
        }else if(vec[i][0] == 'D'){
            center[0][0] += moveLen[i];
        }else if(vec[i][0] == 'W'){
            center[0][1] += moveLen[i];
        }else if(vec[i][0] == 'S'){
            center[0][1] -= moveLen[i];
        }
    }
    std::cout << center[0][0] << ',' << center[0][1] << std::endl;
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

06-25 21:00
门头沟学院 Java
多拆解背记一下当前的高频场景面试题,结合自己的项目经历去作答,面试通过率原来真的不会低!
牛客965593684号:小公司不就是这样的吗,面试要么是点击就送,要么就是往死里拷打,没有一个统一的标准。这个不能代表所有公司
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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