题解 | #坐标移动#
坐标移动
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")