题解 | #坐标移动#

坐标移动

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")

全部评论

相关推荐

05-16 11:16
已编辑
东华理工大学 Java
牛客737698141号:盲猜几十人小公司,庙小妖风大,咋不叫她去4️⃣呢😁
点赞 评论 收藏
分享
粗心的熊熊求求offer:什么内容都没有还弄两页
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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