1. 程式人生 > >小米 2019校園招聘軟體開發類-2018.09.20

小米 2019校園招聘軟體開發類-2018.09.20

1-1.png
1-2.png

最終沒時間提交了,自己寫的測試用例沒問題
思路:
將n進位制轉化為十進位制進行排序,找出單獨出現的數,並記錄字串下標
最終按照輸入字串的順序輸出

#include <bits/stdc++.h>
#define LLL long long
using namespace std;
bool cmp(pair<LLL, LLL> a, pair<LLL, LLL> b){
	return a.second < b.second;
}
bool cmp1(pair<LLL, LLL> a, pair<LLL, LLL> b){
	return
a.first < b.first; } LLL fun(LLL decimal, LLL num){//decimal進位制的數num 轉化為十進位制 LLL res = 0; LLL x = 1; while(num != 0){ res += (num%10 * x); num /= 10; x *= decimal; } return res; } int main() { vector<pair<LLL, LLL>> arr; vector<string>
arrStr; string str; LLL decimal = 0;//進位制 LLL num = 0;//數字 LLL i = 0;//表示輸入的順序 while(true){ cin >> str; if(str == "END") break; arrStr.push_back(str);//儲存字串 int pos = str.find('#', 0); string stemp = str.substr(0, pos); decimal =
atoi(stemp.c_str());//獲取進位制 stemp = str.substr(pos+1, str.size()-pos-1); num = atoi(stemp.c_str());//獲取數字 LLL NUMBER = fun(decimal, num);//將decimal進位制的數num 轉化為十進位制 arr.push_back(make_pair(i, NUMBER)); i++; } if(arrStr.size() == 1){ cout << arrStr[0] << endl; return 0; } sort(arr.begin(), arr.end(), cmp);//按照NUMBER大小排序 vector<pair<LLL, LLL>> res; //將所有隻出現一次的NUMBER的節點存入res if(arr[1].second != arr[0].second){ res.push_back(arr[0]); } for(int i=1; i<arr.size()-1; i++){ if(arr[i].second != arr[i-1].second && arr[i].second != arr[i+1].second){ res.push_back(arr[i]); } } if(arr[arr.size()-1].second != arr[arr.size()-2].second){ res.push_back(arr[arr.size()-1]); } sort(res.begin(), res.end(), cmp1);//按照初始輸入的先後順序排序 for(int i=0; i<res.size(); i++){ cout << arrStr[res[i].first] << endl;//輸出對應的字串 } return 0; } /* 10#15 4#32 4#33 8#17 END 10#15 4#32 4#33 8#17 8#11 8#13 9#67 12#55 END */

2-1.png
2-2.png
2-3.png
2-4.png