题解 | #坐标移动#
坐标移动
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")
深信服公司福利 832人发布
查看1道真题和解析