本文主要是介绍NowCoder HJ17 坐标移动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
华为机试刷题
题目: HJ17 坐标移动
编程语言: C++
解题状态: 基础不牢,磕磕绊绊的
思路
本题主要是模拟题,分为三个步骤:获取字符串后利用分号获取坐标移动步骤;判断步骤是否合法;移动坐标。
代码
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;bool isValid(string& s) {if (s.size() < 2 || s.size() > 3) return false;if (s[0] != 'A' && s[0] != 'W' && s[0] != 'S' && s[0] != 'D') return false;for (int i = 1; i < s.size(); i++) {if (s[i] < '0' || s[i] > '9') return false;}return true;
}void move(string const& cmd, int& x, int& y) {int num = 0;if (cmd.size() == 3) {num = (cmd[1] - '0') * 10 + (cmd[2] - '0');} else {num = cmd[1] - '0';}switch (cmd[0]) {case 'A': x -= num;break;case 'D': x += num;break;case 'S': y -= num;break;case 'W': y += num;break;default:break;}
}int main() {string str;while (cin >> str) {int x = 0, y = 0;vector<string> vec;int subLen = 0;for (int i = 0; i < str.size(); i++) {if (str[i] != ';') {subLen++;continue;}vec.push_back(str.substr(i - subLen, subLen));subLen = 0;}for (auto & i : vec) {if (isValid(i)) move(i, x, y);}cout << x << "," << y << endl;}return 0;
}
这篇关于NowCoder HJ17 坐标移动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!