これが仕事をする一つの方法です。間違いなく可能な限り最も効率的ではありませんが、とにかく素晴らしいです。これは、1 つだけが残りの部分と異なる限り (明らかに単位桁で)、任意の数の入力に対して機能します。
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> n = {4, 14, 27, 24, 34};
std::sort(std::begin(n), std::end(n),
[](int a, int b) { return a%10 < b%10;});
std::cout << ((n[0]%10 < n[1]%10) ? n.front() : n.back());
}
編集:別のものを追加することにしました。これはまだ@Riciの(非常に素晴らしい)ソリューションよりも多くの比較を行いますが、少なくとも線形です(元のデータを再配置しません):
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> n = {4, 14, 27, 24, 34};
auto pos = std::adjacent_find(std::begin(n), std::end(n),
[](int a, int b) { return a%10 != b%10; });
if (pos != std::begin(n))
std::cout << pos[1];
else
std::cout << n[n[1]%10 != n[2]%10];
}