華為筆試-座標移動
阿新 • • 發佈:2018-11-10
題目描述
開發一個座標計算工具, A表示向左移動,D表示向右移動,W表示向上移動,S表示向下移動。從(0,0)點開始移動,從輸入字串裡面讀取一些座標,並將最終輸入結果輸出到輸出檔案裡面。
輸入:
合法座標為A(或者D或者W或者S) + 數字(兩位以內)
座標之間以;分隔。
非法座標點需要進行丟棄。如AA10; A1A; $%$; YAD; 等。
下面是一個簡單的例子 如:
A10;S20;W10;D30;X;A1A;B10A11;;A10;
處理過程:
起點(0,0)
+ A10 = (-10,0)
+ S20 = (-10,-20)
+ W10 = (-10,-10)
+ D30 = (20,-10)
+ x = 無效
+ A1A = 無效
+ B10A11 = 無效
+ 一個空 不影響
+ A10 = (10,-10)
結果 (10, -10)
輸入描述:
一行字串
輸出描述:
最終座標,以,分隔
示例1
輸入
A10;S20;W10;D30;X;A1A;B10A11;;A10;
輸出
10,-10
程式碼如下
#include<iostream> #include<vector> #include<string> using namespace std; bool isNum(char c) { return ('0' <= c && c <= '9'); } bool isASWD(char c) { return (c == 'A' || c == 'S' || c == 'D' || c == 'W'); } int main() { string str; while(cin >> str) { int x = 0, y = 0; vector<string> vecstr; string temp; for(int i = 0; i < str.size(); i++) { if(str[i] == ';') { vecstr.push_back(temp); temp.clear(); } else { temp.push_back(str[i]); } } for(int i = 0; i < vecstr.size(); i++) { int num = 0; str = vecstr[i]; if(str.size() == 3 && isASWD(str[0]) && isNum(str[1]) && isNum(str[2])) num = (str[1] - '0')*10 + str[2] - '0'; else if(str.size() == 2 && isASWD(str[0]) && isNum(str[1])) num = str[1] - '0'; else continue; switch (str[0]) { case 'A': x -= num;break; case 'D': x += num;break; case 'S': y -= num;break; case 'W': y += num;break; default:break; } } cout << x << "," << y << endl; } return 0; }
華為筆試 C++ 春招刷題 秋招刷題 線上程式設計