找異數(小米線上筆試)
阿新 • • 發佈:2018-12-11
#號之前是進位制數(2~16),之後為該進位制數下的數值,找出輸入當中不同與其他數的數值。下例當中前三個表示123,最後一個表示14,所以輸出8#16。程式碼的編譯環境為vs2017
輸入:
16#7B
10#123
4#1323
8#16
END
輸出:
8#16
#include <iostream> #include <string> #include<vector> #include<cstdlib> #include<algorithm> using namespace std; int transform(string& s){ int data1 = atoi(s.c_str());//data1為轉換基數 size_t begin = 0; while(s[begin] != '#'){ ++begin; } ++begin; int integer = 0; integer = stoi(s.substr(begin), &begin, data1); return integer; } int find_diff(vector<int>& res){ int num = res[0]; int times = count(res.begin(), res.end(), num); if(times == 1) return 0; else{ for(int i = 1; i < res.size(); ++i){ if(res[i] != num) return i; } } } int main(){ string s; vector<string> svec; vector<int> res;//存放轉換完之後的十進位制數 while(cin >> s && s != "END"){ svec.push_back(s); int dec = transform(s); res.push_back(dec); } int i = find_diff(res);//找只出現一次的數的下標 for (auto i : res) cout<<i<<" "; cout << endl; cout<<svec[i]; system("pause"); return 0; }