1. 程式人生 > >找異數(小米線上筆試)

找異數(小米線上筆試)

 #號之前是進位制數(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;
}